如何删除从数据网格视图中检查为假的行

本文关键字:检查 视图 网格 数据网 何删除 删除 数据 | 更新日期: 2023-09-27 18:33:33

我是c#的新手。我正在尝试从 excel 工作表导入一些数据,然后像这样在数据网格视图中显示它

  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 循环在几次迭代后自动停止,直到最后一次才运行,这就是我无法删除所有行的原因。我不知道为什么会这样

如何删除从数据网格视图中检查为假的行

将删除行代码替换为以下代码:

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