我记得rows.delete只是记下删除标志,实际上未删除行的,需要用AcceptChanges提交才会删除datatable中的数据,但我刚才试了一下没有用AcceptChanges提交就直接删除了,是我记忆有错误吗?
我的代码是这样的
                for (i = 0; i < dt_trans.Rows.Count; i++) {
                    ksdm = dt_trans.Rows[i]["trans_ctloc_dr"].ToString();
                    llzdm = dt_trans.Rows[i]["llzdm"].ToString();
                    if (llzdm == "")
                    {                    }
                    else {
                        if (llzdm.Substring(0, 3) == ksdm)
                        {                        }
                        else {
                            dt_trans.Rows[i].Delete();
                        }
                        
                    }
                }
                dt_trans.AcceptChanges();
for循环里Rows[i].Delete()直接就删掉数据了,导致后面的dt_trans.Rows.Count发生变化,执行出错了,我明明记得不提交是不删除数据的,好奇怪

解决方案 »

  1.   

    如果你在创建datatable时没有执行AcceptChanges这个方法,那么在delete时,不会标记,会直接删除掉。
      

  2.   

    楼上的意思是在for循环前也加个AcceptChanges吗?
      

  3.   


    dt_trans这个的数据是怎么生成的?
      

  4.   

    如果dt_trans.Rows.Count不好用就选其他方法如:
    DataRow[] 筛选已有数据 = 缓存数据表.Tables["啊啊啊"].Select("_ID ='" + 保存ID.ToString() + "'");
    int 缓存表索引 = 缓存数据表.Tables["啊啊啊"].Rows.IndexOf(筛选已有数据[0]);
    缓存数据表.Tables["啊啊啊"].Rows[缓存表索引].Delete();/*删除按条件选定的数据行*/
    2013年06月20日→星座:双子座
    癸巳〖蛇〗、戊午月、丁巳日、戊申时
    二〇一三年、五月、十三
    今属:火;五行:水火土金;缺:木。
    纳音五行:长流水。
      

  5.   

    dt_trans这个是通关判断一系列条件动态生成的,我在for循环加了AcceptChanges,好像是可以了
      

  6.   


    可以参考MSDN
    http://technet.microsoft.com/zh-cn/magazine/system.data.datarow.delete(VS.90).aspx