Нужна помощь, чтобы решить эту проблему.
У меня есть сетка, а внутри сетки у меня есть флажок, и после щелчка я делаю событие обратной передачи и пытаюсь обновить эту строку только в базе данных.
Это мой код флажка gridview. см. 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);
}