GridView单元格未在RowCommand事件上注册任何控件

时间:2009-06-17 13:05:40

标签: c# asp.net gridview rowcommand

首先,我意识到大部分内容也可以使用ItemTemplates完成。如果我想做的事情根本不可能,我会考虑改用它们。

以下是我的困境的基础:

我在ASPB页面中有一个GridView,它在CodeBehind中加载。每行包含几个触发OnRowCommand事件的按钮。当有人单击“编辑”按钮时,我创建一个TextBox对象并将其添加到特定单元格的Controls集合中。

这很好用。

问题是,当用户单击“保存”按钮时,会再次触发OnRowCommand,但单元格正在Controls集合中注册0个项目。我很确定这是在PostBack之前发生的,所以我不确定为什么我无法访问TextBox控件。

我在最初添加TextBox后进行了检查,它在单元格中显示了1个Control。在使用文本框加载页面并单击按钮之间的某处,这些控件已丢失。谷歌帮助不大。有什么想法吗?

4 个答案:

答案 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