需要一些帮助来解决这个问题。
我有一个网格视图,在网格视图中有一个复选框,单击复选框后,我正在执行后台事件,并尝试仅更新数据库中的此特定行。
这是我的网格视图复选框代码。请参见OnCheckedChanged。
<asp:TemplateField HeaderText="Sample">
<ItemTemplate>
<asp:CheckBox runat="server"
ID="chkSample"
Checked='<%# Bind("Sample") %>'
OnCheckedChanged="UpdateSupplyLed"
AutoPostBack="True">
</asp:CheckBox>
</ItemTemplate>
</asp:TemplateField>
代码:
protected void UpdateSupplyLed(object sender, EventArgs e)
{
foreach (GridViewRow di in SamplingGridView.Rows)
{
CheckBox chkBx = (CheckBox)di.FindControl("chkSample");
if (chkBx != null && chkBx.Checked)
{
//update database logic here.
}
}
}
上述代码可以正常工作,但它会获取所有被选中的复选框,而不管我刚刚选中的是哪一个。我只需要一个。
如何获取刚刚选中的那一行值。有些行可能已经被选中了,因为这些记录的状态是true,我不想更新这些记录。
我认为我已经准确表达了我的问题!
更新:答案是:
protected void UpdateSupplyLed(object sender, EventArgs e)
{
CheckBox chkSampleStatus = sender as CheckBox;
bool sample = chkSampleStatus.Checked;
GridViewRow row = chkSampleStatus.NamingContainer as GridViewRow;
TextBox txtId = row.FindControl("Id") as TextBox;
int id = Int32.Parse(txtId.Text);
}