asp.net gridview复选框选择
问题描述:
需要一些帮助来解决这个问题。asp.net gridview复选框选择
我有一个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.
}
}
}
上面的代码工作正常,但它让我所有的检查,我刚才查了一个irresepective的复选框。我不想要所有的人。
我怎样才能得到刚刚检查过的唯一一行值。某些行可能已经被检查过,因为这些记录的状态为真,我不想更新这些记录。
我想我的问题是对的!
更新:答案是:
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);
}
答
试试这个:
CheckBox chkBx = sender as CheckBox;
不是遍历所有行。
我没有在GridView中以这种方式使用CheckBox。通常我会使用GridView的OnRowCommand事件,并使用RowIndex或CommandArgument值来更新数据库。
想一想OnRowcommand对于CheckBox的启动可能会很棘手,更好的解决方案可能会坚持使用复选框的CheckChanged事件并使用NamingContainer控件导航到GridViewRow服务器端。喜欢的东西:
GridViewRow row = chkBx.NamingContainer as GridViewRow;
我假设去复选框=>小区=>行,如果你谷歌ASP.NET NamingContainer你会得到一些更多的细节。
答
也试试这个,如果上面不完全
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;
}
}
工作}
谢谢您的回答。但我需要来自同一行的其他值,所以如何获取特定gridview行的行ID。这样我可以得到记录的Id。 – Supremestar 2009-08-27 13:08:59
然后,我建议不绑定复选框的OnCheckChanged,而是使用GridViews OnRowCommand,而GridVieweCommandEventArgs提供的行HollyStyles – 2009-08-27 13:18:36
, 我没有GridView中的select命令字段,所以Gridview的行命令没有触发。我应该怎样做我的朋友? 请帮忙。 – Supremestar 2009-08-27 13:37:10