Context是一个古老的ASP 2.0应用程序。
我有一个全局正常工作的gridView:
<asp:GridView ID="GV" runat="server" AutoGenerateColumns="False" DataKeyNames="Id" DataSourceID="DS" AllowPaging="true">
...
<asp:TemplateField HeaderText="MyFieldName" >
<ItemTemplate>
<asp:CheckBox ID="CB_ID" runat="server" OnCheckedChanged="CB_CheckedChanged" AutoPostBack="true" />
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox ID="CB_ID" runat="server" OnCheckedChanged="CB_CheckedChanged" AutoPostBack="true" />
</EditItemTemplate>
</asp:TemplateField>
...
</GridView>
protected void CB_radio_obligatoire_CheckedChanged(object sender, EventArgs e)
{
CheckBox checkbox = sender as CheckBox;
}
因此所有GridView的行都代表数据库项。 我的CB_radio_obligatoire_CheckedChanged方法需要调用storedProcedure并需要DB记录ID。
如何在此Gridview中设置和访问此记录ID?
我想最简单的方法是设置一个绑定到ID的隐藏字段。 如果是这样,这个隐藏的字段应该位于何处?作为GridView的隐藏列?在asp:TemplateField中?在ItemTemplate里面?
答案 0 :(得分:1)
如果您知道行索引,则可以访问GridViewRow
的{{1}}值。
protected void CB_ID_CheckedChanged(object sender, EventArgs e)
{
//cast the sender back to the checkbox
CheckBox cb = sender as CheckBox;
//cast the namingcontainer of the checkbox back to a gridviewrow
GridViewRow row = cb.NamingContainer as GridViewRow;
//as one-liner
GridViewRow row = (GridViewRow)((CheckBox)sender).NamingContainer;
//get the datakeyname value from the correct row in the gridview
int id = (int)GV.DataKeys[row.RowIndex]["Id"];
}