我有一个 gridview,每一行数据都有一个复选框。
当选中或取消选中该复选框时,我需要更新数据库中的位标志。
我正在尝试使用 OnCheckedChanged 事件。
它确实会触发,但是我收到了一个与 ID 有关的空错误。
我的问题是,我不太确定如何获取 OnCheckedChanged 事件代码所需的 ID。
我需要此 ID 来更新数据库中的相应行。
我在 StackOverflow 上发现了一些相关问题,但所提供的答案都没有真正帮助我解决问题。
谢谢!
我的gridview代码:
<asp:GridView ID="gvlisting" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField HeaderText="Item Is Ready">
<ItemTemplate>
<asp:CheckBox ID="isReady" runat="server" AutoPostBack="true" OnCheckedChanged="isReady_CheckedChanged" Checked='<%#isReady(CInt(Eval("isReady")))%>'/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Item Name">
<ItemTemplate>
<asp:Label ID="itemName" runat="server" Text='<%#cleanString(Eval("itemName").ToString())%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
后台代码:
Public Sub isReady_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim box As CheckBox = DirectCast(sender, CheckBox)
If box.Checked = True Then
'custom code for executing an SQL UPDATE statement
db.ExecuteNonQuery(AddIsreadyFlag, New SqlParameter("@itemID", Me.ID))
Else
db.ExecuteNonQuery(RemoveIsreadyFlag, New SqlParameter("@itemID", Me.ID))
End If
End Sub
最佳答案
Me.ID
是 Page
的 ID
,因为 Me
是当前页面实例。
您可以使用 ID 添加另一个模板字段:
<asp:TemplateField HeaderText="Item-ID" Visible="false">
<ItemTemplate>
<asp:Label ID="itemID" runat="server" Text='<%# Eval("itemID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
现在您可以使用 NamingContainer
获取行并使用 FindControl
获取标签:
Public Sub isReady_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim box As CheckBox = DirectCast(sender, CheckBox)
Dim row = DirectCast(box.NamingContainer, GridViewRow)
Dim itemID = DirectCast(row.FindControl("itemID"), Label).Text
If box.Checked = True Then
'custom code for executing an SQL UPDATE statement
db.ExecuteNonQuery(AddIsreadyFlag, New SqlParameter("@itemID", itemID))
Else
db.ExecuteNonQuery(RemoveIsreadyFlag, New SqlParameter("@itemID", itemID))
End If
End Sub
关于asp.net - 将 ID 值传递给后面代码中的 OnCheckedChange 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25364640/