思归大侠请进:还是保持ViewState的问题

guobaoxiang 2003-10-20 10:20:02
上个贴子
http://expert.csdn.net/Expert/topic/2337/2337880.xml?temp=.9877436
按照你说的已经解决,只是还有两个问题,请帮忙
1我在Panel1.controls.clear后,加了一个包含DataGrid的UserControl,假如我选择其中的一行,也激发SelectedIndexChanged事件,但该行就是无法选择,只是在第二次以后才可以
2我加的这个DataGrid的Datasource为一个DataTable,使用SqlDataAdapter.Fill(DataTable)方法填充的没有问题,视图状态可以保存,可有时我的数据源来自一个XMLDocument,它的格式是这样的:
<?xml version="1.0" encoding="gb2312" ?>
- <SMSvrXML TYPE="OBJSEARCH">
<SMWS>HeatMapLocal</SMWS>
<APP>DEMO</APP>
<MAP>管线编辑</MAP>
<ERROR />
<INFO />
<REC SMID="177" SMSDRIW="495036" SMSDRIN="302768" SMSDRIE="507274" SMSDRIS="302509" SMCHECKEDUSERID="0" SMEDITSTATE="0" SMGRANULE="12315.0911792194" SMUSERID="177" SMLENGTH="13320.7371138765" SMTOPOERROR="0" 管线名称="长安线" 管线长度="0" 管线代号="0" 起点="(0)" 终点="(0)" 父管线="176" 所别="0" 管别="0" 名别="0" 类别="0" 敷设方式="0" 保温类型="0" 管径="" 壁厚="" TOPLEFTX="498182.689884098" TOPLEFTY="304692.75687987" BOTTOMRIGHTX="510497.781063317" BOTTOMRIGHTY="304692.75687987" CENTERX="504340.235473707" CENTERY="304562.057216888" WIDTH="12315.0911792194" HEIGHT="261.399325964332" LAYER="管线@HeatMaps" />
<USERID>9.75689374.7336337912.0452777778</USERID>
<IP>127.0.0.1</IP>
<PORT>8010</PORT>
<LAYER>管线@HeatMaps</LAYER>
<STARTRECNO>2</STARTRECNO>
<FINDMAX>10</FINDMAX>
<STARTLAYER>1</STARTLAYER>
</SMSvrXML>
我必须逐一读出REC节点,依次添加,代码如下:
Dim T As New DataTable
Dim Values() As String
Dim HasGet as boolean = false
While X.Read
If X.NodeType = XmlNodeType.Element Then
If X.Name = "REC" Then
if not hasget then
X.MoveToFirstAttribute()
For cFields = 0 To X.AttributeCount - 1
t.Columns.Add(X.Name, System.Type.GetType("System.String"))
X.MoveToNextAttribute()
Next
X.MoveToElement()
ReDim Values(X.AttributeCount - 1)
hasget=true
End If
Dim ATT As Integer
For ATT = 0 To X.AttributeCount - 1
Values(ATT) = X.GetAttribute(ATT)
Next
t.Rows.Add(Values)
End If
End If
End While
FC = Nothing
然后再DataGrid1.DataBind,可这时DataGrid1的视图状态就没有保存,为什么?
...全文
35 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
辅助也行 2003-10-20
  • 打赏
  • 举报
回复
是啊,我就是在每次Page_Load中都添加的,上次你告诉我要想叫添加的UserControl的UserControl的ViewState不冲突,就要先添加再删掉以前的,再添加后来的USerControl,后来我做了一下改进,我做了一个CustomControl,inherts from Panel,重载了LoadViewState方法,根据不同情况选择是否MyBase.LoadViewState
我是说第一次没有触发SelectedIndexChanged事件,还是保持选择前的状态,而且PostBack回的Request.Form完全正确,为什么?
可否告知QQ或MSN
saucer 2003-10-20
  • 打赏
  • 举报
回复
响应什么? if you added handlers dynamically, you have to add them everytime upon postback
辅助也行 2003-10-20
  • 打赏
  • 举报
回复
刚才我弄错了,选择DataGrid中的其中一条记录时,第一次__PostBack回的参数是完全正确的,只是没有响应,这我就不明白了,既然已经SaveViewState了,为什么会不响应呢?第一次和第二次的区别到底在哪儿?
请指教?
辅助也行 2003-10-20
  • 打赏
  • 举报
回复
我的DataGrid是包含在另一个UserControl中的,保证都有ID,所有的UserControl在Clear后添加的都存在两次才响应的问题;至于DataSource在DataBind后显示的结果是没有问题的,我想是漏掉了什么,请指教。
saucer 2003-10-20
  • 打赏
  • 举报
回复
1. DataGrid doesn't care where the DataSource comes from, something else is wrong
2. make sure you give the DataGrid an ID

DataGrid dg = new DataGrid ();
...
dg.ID = "DataGrid1";
Panel1.Controls.Add(dg);

62,039

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧