需要一些帮助来解决这个问题。
我有一个gridview,在gridview中我有一个复选框,单击复选框后,我正在进行回发事件,并尝试仅在数据库上更新此特定行。
这是我的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);
}
答案 0 :(得分:7)
试试这个:
CheckBox chkBx = sender as CheckBox;
而不是迭代所有行。
我自己没有以这种方式在GridView中使用CheckBox。通常我会使用GridView的OnRowCommand事件,并使用RowIndex或CommandArgument值来更新数据库。
考虑它OnRowcommand对于CheckBox来说可能很棘手,更好的解决方案可能是坚持使用复选框的CheckChanged事件并使用控件NamingContainer导航到GridViewRow服务器端。类似的东西:
GridViewRow row = chkBx.NamingContainer as GridViewRow;
我假设去了CheckBox =&gt; Cell =&gt;如果您使用Google ASP.NET NamingContainer,您将获得更多细节。
答案 1 :(得分:0)
如果上面没有完全正常工作,请尝试这个
DataTable dtGetStTable = (DataTable)ViewState["dtNewStudents"];
//Looping throgh Grid and deleting row after finding the checked row
for (int i = dtGetStTable.Rows.Count - 1; i > -1; i--)
{
GridViewRow row = GridView1.Rows[i];
bool isChecked = ((CheckBox)row.FindControl("CheckBox1")).Checked;
if (isChecked)
{
try
{
string RollNo = dtGetStTable.Rows[i]["RollNo"].ToString();
string Class = dtGetStTable.Rows[i]["Class"].ToString();
string Division = dtGetStTable.Rows[i]["Division"].ToString();
//Deleting the Reocrd from DataBase
TotalRecordDeleted += objSRE.DeleteTheSelectedRecord(RollNo, Class, Division);
dtGetStTable.Rows[i].Delete();
dtGetStTable.AcceptChanges();
}
catch (Exception ex)
{
//throw;
}
}
}