如何从datagridview中删除选中为false的行

时间:2014-12-08 06:16:55

标签: c# excel datagridview

我是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循环在一些迭代后自动停止,并且直到最后才运行,这就是为什么我无法删除所有行。我不知道它为什么会发生

1 个答案:

答案 0 :(得分: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

相关问题