use*_*854 9 asp.net controls postback gridview
我有GridView一些BoundFields和两个TemplateFields.在这两个中TemplateFields,我动态创建UserControls包含a DropDownList和a TextBox,用户可以修改.
当我尝试在a之后获取控件PostBack的值时,值BoundFields仍然存在,但我的动态控件消失了.我可以再次创建它们但它不会获得用户的值...如何在丢失之前获取这些值?
这是我的一些代码:
在RowDataBound事件中:
Select Case type
Case "BooleanBis"
e.Row.Cells(2).Controls.Clear()
Dim list1 As BooleanBisList = New BooleanBisList(avant, False)
e.Row.Cells(2).Controls.Add(list1)
e.Row.Cells(4).Controls.Clear()
Dim list2 As BooleanBisList = New BooleanBisList(apres, True)
e.Row.Cells(4).Controls.Add(list2)
Case "Boolean"
e.Row.Cells(2).Controls.Clear()
Dim list3 As BooleanList = New BooleanList(avant, False)
e.Row.Cells(2).Controls.Add(list3)
e.Row.Cells(4).Controls.Clear()
Dim list4 As BooleanList = New BooleanList(apres, True)
e.Row.Cells(4).Controls.Add(list4)
End Select
Run Code Online (Sandbox Code Playgroud)
在我的按钮单击事件中,我尝试获取用户控件:
Case "String"
temp.ChampValeurApres = DirectCast(Tableau1.Rows(i).Cells(selectedColumn).Controls(1), TextBox).Text
Run Code Online (Sandbox Code Playgroud)
但我得到它不存在的错误.
您应该在RowCreated中创建动态控件而不是RowDataBound,因为此事件会在每次回发时触发,而RowDataBound只有在GridView获取数据绑定时才会触发DataSource.
必须在每个回发上重新创建动态创建的控件,并使用与之前相同的ID,然后它们将在ViewState中保留其值,并且事件将正确触发(对于DropDownList的SelectedIndexChanged事件).
所以你应该创建它们RowCreated并"填充"它们RowDataBound(对于DropDownList数据源/ Items或TextBox-Text).
| 归档时间: |
|
| 查看次数: |
5801 次 |
| 最近记录: |