首先,我意识到大部分内容也可以使用ItemTemplates完成。如果我想做的事情根本不可能,我会考虑改用它们。
以下是我的困境的基础:
我在ASPB页面中有一个GridView,它在CodeBehind中加载。每行包含几个触发OnRowCommand事件的按钮。当有人单击“编辑”按钮时,我创建一个TextBox对象并将其添加到特定单元格的Controls集合中。
这很好用。
问题是,当用户单击“保存”按钮时,会再次触发OnRowCommand,但单元格正在Controls集合中注册0个项目。我很确定这是在PostBack之前发生的,所以我不确定为什么我无法访问TextBox控件。
我在最初添加TextBox后进行了检查,它在单元格中显示了1个Control。在使用文本框加载页面并单击按钮之间的某处,这些控件已丢失。谷歌帮助不大。有什么想法吗?
答案 0 :(得分:1)
您正在动态创建文本框,因此您必须在每个帖子上重新绑定网格,提供文本框和ID(始终相同)并重新附加任何事件处理程序。
答案 1 :(得分:1)
当用户单击编辑按钮时,您处于GridView的编辑模式。你还需要设置它吗?
答案 2 :(得分:1)
如果您正在动态创建控件,它们将始终在回发时消失,这意味着您必须在每个循环中继续创建它们。
我个人建议坚持使用ItemTemplates,让自己免受所有这一切带来的麻烦。
答案 3 :(得分:1)
在代码后面创建按钮时,可以使用委托创建一个addhandler。处理程序将在rowcommand之前触发。
Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated
Dim btnsave As New ImageButton
If e.Row.RowType <> DataControlRowType.Pager And e.Row.RowType <> DataControlRowType.Header Then
AddHandler btnedit.Click, AddressOf btnedit_Click
GridView1.Rows(i).Cells(8).Controls.Add(btndel)
end if
end sub
Public Delegate Sub ImageClickEventHandler(ByVal sender As Object, ByVal e As ImageClickEventArgs)
Sub btnedit_Click(ByVal sender As Object, ByVal e As ImageClickEventArgs)
//do whatever you want here.
//possibly a redirect to the current page so nothing else fires
end sub