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

带有复选框控件的 ASP.Net GridView 和 Jquery dataTable

ASP.NET Gridview 复选框列 - Onclick 和 jquery

使用 Jquery 在 asp.net GridView 中查找所有选中复选框

当用户在 GridView ASP.NET 中选择一行时如何自动选择相同 ID 的其他行

ASP.NET WebForms 使用 jQuery v1.9.0 检查 GridView 中的所有复选框不起作用