asp.net gridview 复选框选择
Posted
技术标签:
【中文标题】asp.net gridview 复选框选择【英文标题】:asp.net gridview checkbox selection 【发布时间】:2010-11-23 09:03:23 【问题描述】:需要一些帮助来解决这个问题。
我有一个 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.
上面的代码工作正常,但它让我得到了所有被选中的复选框,而与我刚刚选中的复选框无关。我不想要所有这些。
如何获取刚刚检查的唯一一行值。有些行可能已经检查过了,因为这些记录的状态为真,我不想更新这些记录。
我想我的问题是对的!
更新:答案是:
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);
【问题讨论】:
【参考方案1】:试试这个:
CheckBox chkBx = sender as CheckBox;
而不是迭代所有行。
我自己没有以这种方式在 GridView 中使用 CheckBox。通常我会使用 GridView 的 OnRowCommand 事件,并使用 RowIndex 或 CommandArgument 值来更新数据库。
考虑一下 OnRowcommand 可能很难触发 CheckBox,更好的解决方案可能是坚持使用复选框的 CheckChanged 事件并使用控件 NamingContainer 向上导航到 GridViewRow 服务器端。比如:
GridViewRow row = chkBx.NamingContainer as GridViewRow;
我假设去 CheckBox => Cell => Row 如果你谷歌 ASP.NET NamingContainer 你会得到一些更多的细节。
【讨论】:
感谢您的回答。但是我需要来自同一行的一些其他值,所以我怎样才能获得该特定 gridview 行的行 ID。这样我就可以得到记录的ID。 那我建议不要绑定checkbox的OnCheckChanged,改用GridViews的OnRowCommand,行在GridVieweCommandEventArgs中提供 HollyStyles,我在 Gridview 中没有选择命令字段,因此不会触发 Gridview 行命令。我该怎么办我的朋友?请帮忙。 做了一些修改。 Yuo 可以将 selectedIndexChanged 附加到 CheckBox,但在我写它的时候,我认为这确实是一种解决方案。 哥们,你是明星,真的!它的工作原理就像一个稍加修改的魅力,即 GridViewRow row = chkBx.NamingContainer as GridViewRow;谢谢你。我如何将您的 cmets 标记为答案。干杯【参考方案2】:如果上述方法不完全正常,也试试这个
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;
【讨论】:
以上是关于asp.net gridview 复选框选择的主要内容,如果未能解决你的问题,请参考以下文章
带有复选框控件的 ASP.Net GridView 和 Jquery dataTable
ASP.NET Gridview 复选框列 - Onclick 和 jquery
使用 Jquery 在 asp.net GridView 中查找所有选中复选框