【问题标题】:Remove row from gridview datatable with check box selection in button click event使用按钮单击事件中的复选框选择从 gridview 数据表中删除行
【发布时间】:2014-11-09 06:02:36
【问题描述】:

我正在尝试在按钮单击事件中从 gridview 中删除选定的行,但出现以下错误:

集合已修改;枚举操作可能不会执行。

代码:

    protected void btnRemoveUser_Click(object sender, EventArgs e)
    {  
      DataTable yourDataTable = GetDataTable(Studentlist);     
      //CheckBox chkbx;
      foreach(GridViewRow oneRow in Studentlist.Rows)
      {
        CheckBox  chkbx = (CheckBox)oneRow.FindControl("ckbxID");
          foreach (DataRow rowDT in yourDataTable.Rows)  **//In this line throwing the exception**
          {
              if (chkbx.Checked == true)
              {
                  yourDataTable.Rows.Remove(rowDT);  
              }

          }  
      }     

      Studentlist.DataSource = yourDataTable;
      Studentlist.DataBind();

  }

注意:Studentlist 是 gridview ID。

【问题讨论】:

  • Dnyanesh 说:“你不能在对它执行 foreach 时从集合中删除项目”这是真的,所以尝试声明另一个数据表“DataTable newDataTable = yourDataTable;”并从 newDataTable 中删除行,最后将其传递给数据源

标签: asp.net gridview datatable


【解决方案1】:

在对其执行 foreach 时,您不能从集合中删除项目,详情请访问this

现在您可以使用简单的技术来删除项目。

for(int i = 0; i< yourDataTable.Rows.Count; i++)
  {
      if (chkbx.Checked == true)
      {
          yourDataTable.Rows.RemoveAt(i);
      }
  }

【讨论】:

  • 我看不到 Datatable.Rows 中有 Length() 函数,所以它应该会抛出编译错误。
  • 我的错误计数将在这种情况下起作用。编辑答案
  • @Dnyanesh:谢谢您的回复。使用此技术的行不会正确删除前。如果我选择 1 行,则删除 2 或 3 行。
  • 删除2或3行不明确。仅选择网格中的第一行并将其删除。结果将是它将删除 1 行或将给出一些异常尝试。
  • 如果我选择第一行,它会删除 3 行而不抛出任何异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
相关资源
最近更新 更多