2014-12-08 49 views
1

我是c#的新手。我试图从Excel导入表的一些数据,然后我就显示在DataGridView中这样如何删除从datagridview中检查为false的行

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

与此代码替换乌尔删除行代码:

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

+0

“System.Windows.Forms.DataGridViewRowCollection”不包含关于“ToArray的”的定义和没有扩展方法“ToArray的”接受类型“System.Windows.Forms的的第一个参数。 DataGridViewRowCollection'可以找到(你是否缺少使用指令或程序集引用?) – 2014-12-08 06:22:59

+0

替换代码后这是错误:( – 2014-12-08 06:23:30

+0

@AyyanAlvi检查这一个..对不起,我以前没有测试代码。 – 2014-12-08 06:28:51

相关问题