C# 从gridview C中的复选框构建数组#

C# 从gridview C中的复选框构建数组#,c#,asp.net,arrays,gridview,checkbox,C#,Asp.net,Arrays,Gridview,Checkbox,我正在使用gridview构建一个流程,允许用户提供一个编辑并将其保存到多个记录中。到目前为止,我已经规划到了这一点,但不确定最好的方法是如何构建一个记录ID数组以包含在此编辑中 这就是我现在正在讨论的问题 向my gridview添加一个模板字段,该字段提供一个复选框(完成!) 提供一个包含网格中所有列标题的DropDownList,并将源表列名与DDL中的条目值相关联 在DDL上选择一个项目后,它将打开一个编辑窗口,编辑DDL中所选列的内容 “保存”后,代码隐藏将在数组中旋转,将相同的值写入

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

这就是我现在正在讨论的问题

  • 向my gridview添加一个模板字段,该字段提供一个复选框(完成!)
  • 提供一个包含网格中所有列标题的DropDownList,并将源表列名与DDL中的条目值相关联
  • 在DDL上选择一个项目后,它将打开一个编辑窗口,编辑DDL中所选列的内容
  • “保存”后,代码隐藏将在数组中旋转,将相同的值写入下拉列表中所选列中的每一行。
    • 考虑到这一点,我相信我会捕获焦点列数组中第一条记录中的数据,以便提供编辑列中现有内容的方法
  • GridView中除复选框之外的所有内容都将在GridView之外进行处理,完成后,将重新绘制GridView,清除复选框并在修改的单元格中显示更新的列值

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

    从复选框构建阵列的想法

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

    添加我添加的代码,以从下面每个示例2的复选框中接近数组的填充

    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()));
                  }
              }
          }
      }
    

    您可以在Rowdatabound(选项1)时或Gridview绑定后,单击Save按钮创建网格行循环(选项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
    
            }
        }
    }
    

    希望这有帮助。

    您可以在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引用更改为我的GridView ID ActVulListGV。我添加了一个代码块,说明了我在代码背后添加的内容,称为UPDATE 04/13/17 1PM Central USPJS,我将“CheckBox chk=(row.Cells[0].FindControl(“chkid”)替换为CheckBox);”和“if(chk.Checked)”。。。使用“if(((CheckBox)row.FindControl(“chkid”).Checked)”,但仍然返回空引用错误。不知道为什么…我认为选择2对我来说更有意义。我会试一试,让你知道!谢谢PJS@KenCarter:提供的解决方案是否适用于您?我正在使用您提供的第二个示例,并在“if(chk.Checked)”行中遇到空引用错误。我正要去吃午饭,但会回来试着弄明白为什么我会在这里得到一个空值。使用您的示例,但当然已将GridView1引用更改为我的GridView ID ActVulListGV。我添加了一个代码块,说明了我在代码背后添加的内容,称为UPDATE 04/13/17 1PM Central USPJS,我将“CheckBox chk=(row.Cells[0].FindControl(“chkid”)替换为CheckBox);”和“if(chk.Checked)”。。。使用“if(((CheckBox)row.FindControl(“chkid”).Checked)”,但仍然返回空引用错误。不知道为什么。。。