for (int i=0;dt.Rows.Count;i++)
{
if (dt.Rows[i][2].ToString().Trim() == "")
{
dt.Rows[i].Delete();
}
}
dt.AcceptChanges();
网上说,我以前也用过,没有执行dt.AcceptChanges()句之前,dt.Rows[i].Delete();只是标注该行删除,实际是没有删除的,不影响dt.Rows.Count.
但今天另外写了一个东东,在没有执行dt.AcceptChanges()句之前,每执行一次dt.Rows[i].Delete();就dt.Rows.Count减了1,后在循环就有问题.
请问大家这是什么问题?
解决方案 »
- TrackBar如何实现两个刻度???
- 使用foreach遍历自定义可枚举类型的时候为什么并不要求自定义类型实现 IEnumerable和IEnumerator?
- treeview 递归不成树啊啊啊啊啊~~~
- 有做过EIB或了解EIB的朋友么?
- App_Code.dll能防止被下载吗
- 怎样注册dll文件[winform程序]
- 如何取得注册表中路径中的默认项的值,谢谢!
- 请教高手,如何在我的程序中调用别的程序时,模拟点击该程序中的按钮的事件(谢绝灌水)?
- 重来没见过的代码。。。。。。。。。
- 怎样通过程序删除datadrid中的数据,并提交数据库?
- oracle语句问题
- winform控件listview的滚动条拖动时会停顿
{
if (dt.Rows[i][2].ToString().Trim() == "")
{
dt.Rows[i].Delete();
}
}
for (int i=0;i<dt.Rows.Count;i++)
{
if (dt.Rows[i][2].ToString().Trim() == "")
{
dt.Rows[i].Delete();
}
}
dt.AcceptChanges();
Delete()之后需要datatable.AccepteChanges()方法确认完全删除,因为Delete()只是将相应列的状态标志为删除,那就意味着,我执行dt.Rows[i].Delete();时,该后仍然还存在,只是作了一个标记而已,那么dt.Rows.Count也不应该减1.
你仔细检查下代码,你的dt.rows.count减1,是不是其他地方有影响到的,你重新建一个简单的程序,来测试一下。
如果用remove的话就最好从后向前删了
你看看这篇文章下面的红字部分,看是否有帮助
table.Rows.Add(newRow);
这种的话,在后面加上一句
table.AcceptChanges();
然后再对他的row 进行delete(),就没问题了你肯定是少了一句table.AcceptChanges();