我有一个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
答案 0 :(得分:2)
Me.ID
是ID
的{{1}},因为Page
是当前页面实例。
您可以使用ID添加另一个模板字段:
Me
现在,您可以使用<asp:TemplateField HeaderText="Item-ID" Visible="false">
<ItemTemplate>
<asp:Label ID="itemID" runat="server" Text='<%# Eval("itemID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
获取行,NamingContainer
获取标签:
FindControl
答案 1 :(得分:1)
将ID列添加到网格中,然后根据需要将其visible属性设置为false。
您可以获取Gridview的选定行,然后获取ID列的值(该列不需要是可见的,但它需要存在于网格中)。
var someVar = gvlisting.SelectedRow.Cells[0].Text; //change 0 to correct column
您可能需要在SelectedIndexChanged中执行此操作,但我怀疑,如果是这种情况,您可以使用上述内容轻松地从单元格获取数据,或者像... How to find control in TemplateField of GridView?
答案 2 :(得分:1)
您还可以尝试在OnDataBinding事件中添加自定义属性,并在de CheckChanged事件中检索该值。
protected void chkEnabled_DataBinding(object sender, EventArgs e)
{
CheckBox chk = (CheckBox)sender;
string id = Eval("Id").ToString();
chk.Attributes.Add("data-id", id);
}
protected void chkEnabled_CheckedChanged(object sender, EventArgs e)
{
CheckBox chk = (CheckBox)sender;
string id = chk.Attributes["data-id"];
}