【问题标题】:asp.net gridview checkbox selectionasp.net gridview 复选框选择
【发布时间】: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);
}

【问题讨论】:

    标签: asp.net .net gridview checkbox


    【解决方案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;
        }
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 2011-02-20
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 2020-12-23
      • 2010-11-29
      相关资源
      最近更新 更多