循环检测datatable中的行,如果事勾选的就删除,但为什么不是一次删除呢?还有就是又时候能删除多行,有时候只能删除一行。
for(int i = 0;i<dsSend.Tables[0].Rows.Count;i++)
{
if(dsSend.Tables[0].Rows[i]["select"].ToString() == "True")
{
dsSend.Tables[0].Rows.Remove(dsSend.Tables[0].Rows[i]);
}
}
下面是绑定到DATAGRID里面。
另外如果用
foreach(DataRow mydr in dsSend.Tables[0].Rows)
{
if(mydr["select"].ToString() == "True")
{
dsSend.Tables[0].Rows.Remove(mydr);
dsSend.AcceptChanges();
}
}
总是提示:集合已修改,枚举操作可能不会执行。

解决方案 »

  1.   

    不要用 foreach
    用for另外,就是倒序循环.
      

  2.   

    dsSend.AcceptChanges();
    放最后.
      

  3.   

    SaSBYa,我用了第一种方法也不行啊,另外paddycf001,我在重新绑定到datagrid之前也使用了dsSend.AcceptChanges();还是不行呢?是不是删除dr的时候index发生变化了?
      

  4.   

    for(int i = 0;i<dsSend.Tables[0].Rows.Count;i++)
    {
    if(dsSend.Tables[0].Rows[i]["select"].ToString() == "True")
    {
    dsSend.Tables[0].Rows.Remove(dsSend.Tables[0].Rows[i]);
    }
    }
    这里有问题 当你Remove后dsSend.Tables[0].Rows.Count属性就会被修改,你说的循环还能没问题?建议你先把选定的行集中取去来 最后一起删除
      

  5.   

    cancerser,你觉得又更简洁的方法吗?这个方法就还要新建一个临时数据集
      

  6.   

    int i=0;
    while(i<Tables[0].Rows.Count)
    {
    if(Tables[0].Rows[i]["select"].ToString() == "True")
    {
    dsSend.Tables[0].Rows.RemoveAt(i);
    dsSend.AcceptChanges();
    }
    else
    {
    i++;
    }
    }