如何删除从datagridview中检查为false的行

我是新来的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(); 

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

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

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

replace我们删除行代码与此代码:

 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循环中更改集合,在循环中创build集合的副本。

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