【问题标题】:Building an array from checkboxes in gridview C#从gridview C#中的复选框构建数组
【发布时间】:2017-09-08 11:27:54
【问题描述】:

我正在使用我的 gridview 构建一个流程,允许用户提供一次编辑并将其保存到多个记录中。到目前为止,我已经完成了这一计划,但不确定如何构建一组记录 ID 以包含在此编辑中。

这就是我现在正在做的事情......

  1. 向我的网格视图添加一个模板字段,该字段提供一个复选框(完成!)
  2. 为网格中的所有列标题提供一个 DropDownList,并将源表列名称关联为 DDL 中条目的值。
  3. 在 DDL 上选择一个项目时,OnSelectedIndexChanged 会弹出一个编辑窗口来编辑 DDL 中所选列的内容。
  4. “保存”后,CodeBehind 将旋转数组,将相同的值写入下拉列表中选择的列中的每一行。
    • 考虑到这一点,我相信我会为焦点列捕获数组中第一条记录中的数据,以便提供一种编辑列中现有内容的方法。

除了 GridView 中的 CheckBox 之外的所有内容都将在 GridView 之外进行处理,完成后 GridView 将被重绘,清除 CheckBox 并在那些被修改的单元格中显示更新的列值。

为了理解我在这里修改的内容,我提供了 GridView 左侧的屏幕截图:

关于从 CheckBoxes 构建数组的想法?

更新时间:2017 年 4 月 13 日下午 1 点美国中部

添加我添加的代码以从下面的示例 #2 的 CheckBoxes 中处理数组的填充...

protected void ColumnSelectDDL_TextChanged(object sender, EventArgs e)
{
    foreach (GridViewRow row in ActVulListGV.Rows)
    {
        var ri = -1;

        if (row.RowType == DataControlRowType.DataRow)
        {
            CheckBox chk = (row.Cells[0].FindControl("chkid") as CheckBox);

            if (chk.Checked)
            {
                // Create and append your array here
                var recnumbers = new int[0];
                ++ri;
                  {
                     Label REC = (row.Cells[1].FindControl("RecID") as Label);
                     recnumbers[ri] = Convert.ToInt32(REC.Text);
                  }
                   recnumbers.ToList().ForEach(i => Console.WriteLine(i.ToString()));
              }
          }
      }
  }

【问题讨论】:

    标签: c# asp.net arrays gridview checkbox


    【解决方案1】:

    您可以在 Rowdatabound 时绑定复选框数组(选项 1)或在 Gridview 绑定后单击保存按钮创建网格行循环(选项 2)。

    选项1:

     protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
      {
    
       if (e.Row.RowType == DataControlRowType.DataRow) {
    
    
         CheckBox chk = (row.Cells[0].FindControl("chkid") as CheckBox);
            if (chk.Checked)
            {
    
             //Create the hiddenfield or viewstate which you can access page level.
            }
         }
     }
    

    选项 2:

    foreach (GridViewRow row in GridView1.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
        {
            CheckBox chk = (row.Cells[0].FindControl("chkid") as CheckBox);
            if (chk.Checked)
            {
    
              // Create and append your array here
    
            }
        }
    }
    

    希望这会有所帮助。

    【讨论】:

    • 我认为选项 2 对我来说更有意义。我会试一试,让你知道!谢谢 PJS
    • @KenCarter:提供的解决方案是否适合您?
    • 我正在使用您提供给我的第二个示例,并在“if (chk.Checked)”行中遇到空引用错误。去吃午饭,但会回来尝试弄清楚为什么我在这里得到一个空值。使用您的示例,但当然已将 GridView1 引用更改为我的 ActVulListGV 的 GridView ID。我添加了一个代码块,说明了我在后面的代码中添加的内容,标注为 UPDATE 04/13/17 1PM Central US
    • PJS,我替换了“CheckBox chk = (row.Cells[0].FindControl("chkid") as CheckBox);”和 "if (chk.Checked)" ... 和 "if (((CheckBox)row.FindControl("chkid")).Checked)" 仍然返回空引用错误。不知道为什么...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多