问个关于datatable的rows.delete问题

jojoova 2013-06-20 03:18:01
我记得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发生变化,执行出错了,我明明记得不提交是不删除数据的,好奇怪
...全文
172 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyantifa 2013-06-20
  • 打赏
  • 举报
回复
引用 2 楼 jojoova 的回复:
楼上的意思是在for循环前也加个AcceptChanges吗?
可以参考MSDN http://technet.microsoft.com/zh-cn/magazine/system.data.datarow.delete(VS.90).aspx
jojoova 2013-06-20
  • 打赏
  • 举报
回复
dt_trans这个是通关判断一系列条件动态生成的,我在for循环加了AcceptChanges,好像是可以了
  • 打赏
  • 举报
回复
如果dt_trans.Rows.Count不好用就选其他方法如: DataRow[] 筛选已有数据 = 缓存数据表.Tables["啊啊啊"].Select("_ID ='" + 保存ID.ToString() + "'"); int 缓存表索引 = 缓存数据表.Tables["啊啊啊"].Rows.IndexOf(筛选已有数据[0]); 缓存数据表.Tables["啊啊啊"].Rows[缓存表索引].Delete();/*删除按条件选定的数据行*/ 2013年06月20日→星座:双子座 癸巳〖蛇〗、戊午月、丁巳日、戊申时 二〇一三年、五月、十三 今属:火;五行:水火土金;缺:木。 纳音五行:长流水。
yyantifa 2013-06-20
  • 打赏
  • 举报
回复
引用 2 楼 jojoova 的回复:
楼上的意思是在for循环前也加个AcceptChanges吗?
dt_trans这个的数据是怎么生成的?
jojoova 2013-06-20
  • 打赏
  • 举报
回复
楼上的意思是在for循环前也加个AcceptChanges吗?
yyantifa 2013-06-20
  • 打赏
  • 举报
回复
如果你在创建datatable时没有执行AcceptChanges这个方法,那么在delete时,不会标记,会直接删除掉。

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧