1

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

以下是我的困境的基本情况:

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

这工作正常。

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

我在最初添加 TextBox 后进行了检查,它在单元格中显示了 1 个控件。在加载带有文本框的页面和单击按钮之间的某个地方,这些控件已经丢失。谷歌没有太大帮助。有任何想法吗?

4

4 回答 4

1

您正在动态创建文本框,因此您必须在每次回帖时重新绑定您的网格,提供您的文本框和 id(始终相同)并重新附加任何事件处理程序。

于 2009-06-17T13:09:21.277 回答
1

当用户单击编辑按钮时,您处于 GridView 的编辑模式。你也需要设置吗?

于 2009-06-17T13:10:18.217 回答
1

如果您正在动态创建控件,它们将始终在回发时消失,这意味着您必须在每个循环中继续创建它们。

我个人建议坚持使用 ItemTemplates,让自己远离所有这些可能带来的头痛。

于 2009-06-17T13:10:47.640 回答
1

当您在代码后面创建按钮时,您可以创建一个带有委托的 addhandler。处理程序将在行命令之前触发。

 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
于 2009-06-17T13:47:06.053 回答