我正在尝试从后面的代码更新GridView,但遇到了一个问题,即使经过无数次搜索,我仍然无法理解。
在GridView EditItemTemplate中编辑文本框后,单击行中的“更新”按钮将触发RowUpdating事件。在RowUpdating事件处理程序中,我使用以下代码来获取已编辑的txtBox1的字符串:
using IPclass = NetworkClass<tcp::socket>;
我能够获得正确的text1值,但问题是,如果我在同一偶数处理程序中编写GridView1.DataBind(),则上面的代码将导致错误“对象引用未设置为对象的实例。 ”我不明白,如果删除/注释GridView.DataBind()方法,为什么相同的代码也会起作用。
这个问题困扰了我很多天,我将非常感谢您的帮助。
这是我的VB.net代码,用于处理GridView1.RowUpdating。仅当我删除或注释掉GridView1.DataBind()方法但不会用新数据更新GridView时,这才起作用:
Dim text1 As String = (CType(GridView1.Rows(e.RowIndex).FindControl("txtBox1"), TextBox)).Text
我的GridView的.aspx代码:
Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs) Handles GridView1.RowUpdating
Dim text1 As String = (CType(GridView1.Rows(e.RowIndex).FindControl("txtBox1"), TextBox)).Text
Dim text2 As String = (CType(GridView1.Rows(e.RowIndex).FindControl("txtBox2"), TextBox)).Text
Dim IDkey As String = GridView1.DataKeys(e.RowIndex).Values(0).ToString()
Dim sqlquery As String = "UPDATE tblPMU SET zone = '" & text1 & "', substation ='" & text2 & "' WHERE (ID ='" & IDKey & "')"
Dim sqlCmd As New SqlCommand(sqlquery, conn)
Dim sqlDa As New SqlDataAdapter(sqlCmd)
conn.open()
Dim dt As New DataTable()
sqlDa.Fill(dt)
conn.Close()
GridView1.EditIndex = -1
UpdateGridview()
GridView1.DataBind()
Label5.Text=text1
End Sub