【问题标题】:How to delete rows checked as false from datagridview如何从datagridview中删除检查为假的行
【发布时间】:2014-12-08 06:16:55
【问题描述】:

我是 C# 新手。我正在尝试从 excel 表中导入一些数据,然后像这样在 datagridview 中显示它

  OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select email from [" + loadtextfeild.Text + "$] where email like '%@%'     ", conn);
  DataTable dt = new DataTable();
  Excel.Application excel = new Excel.Application();
  Excel.Workbook wb = excel.Workbooks.Open(opentextfeild.Text);
  myDataAdapter.Fill(dt);
  displayviewgrid.DataSource = dt;
  wb.Close();

我在表单中有一个按钮,通过它我可以删除未选中的行。这个按钮现在可以正常工作。例如,如果有 10 行并且这些都未选中,现在我按下按钮,那么应该删除所有行,但它确实删除了所有行。它删除了其中的一些,然后我再次按下它,然后再次删除了其余的。对于选中的值,它工作正常,它不会删除它们,但对于多个未选中的值,它不能正常工作。它不是一次将它们全部删除。这是代码

 foreach (DataGridViewRow roww in displayviewgrid.Rows)
  {               
    if (Convert.ToBoolean(roww.Cells[Column1.Name].Value) == false)
      {
        displayviewgrid.Rows.Remove(roww);// MessageBox.Show( "sadas"); 
      }              
  }

foreach 循环在一些迭代后自动停止,直到最后一次才运行,这就是我无法删除所有行的原因。我不知道为什么会这样

【问题讨论】:

    标签: c# excel datagridview


    【解决方案1】:

    用这个代码替换你的删除行代码:

    foreach (var roww in displayviewgrid.Rows.Cast<DataGridViewRow>().ToArray())
    {               
       if (Convert.ToBoolean(roww.Cells[Column1.Name].Value) == false)
           displayviewgrid.Rows.Remove(roww);// MessageBox.Show( "sadas");               
    }
    

    原因:你不能在foreach循环中改变集合,在循环中复制集合。

    更多信息: http://www.dotnetperls.com/invalidoperationexception

    【讨论】:

    • 'System.Windows.Forms.DataGridViewRowCollection' 不包含 'ToArray' 的定义,并且没有扩展方法 'ToArray' 接受类型为 'System.Windows.Forms.DataGridViewRowCollection' 的第一个参数找到(您是否缺少 using 指令或程序集引用?)
    • @AyyanAlvi 检查这个.. 抱歉我之前没有测试过代码。
    • 非常感谢兄弟,您能告诉我之前的问题是什么吗?
    • @AyyanAlvi foreach 对集合具有的元素执行,如果您更改源集合意味着 foreach 集合合同可能会中断,因此请使用 ToArray 或 ToList 在循环中复制集合,然后您可以更改原始集合源集合。
    猜你喜欢
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多