C#中DataTable删除多条数据

实际使用

//倒序循环DataTable,删除数据                
for (int i = dtPreview.Rows.Count - 1; i >= 0; i--)
{
    if (listSelected.Contains(i))
    {
        dtPreview.Rows[i].Delete();
    }
}
dtPreview.AcceptChanges();

说明

如果使用正序循环调用Rows[i].Delete();方法,会有问题。
因为执行完Delete()方法,就会把DataTable中的数据删除掉,导致dtPreview.Rows.Count的值一直在变化。
所以需要倒着循环,从最大的索引开始删除,这样删除后,被删除索引前面的索引不会发生变化。

网上百度的结果

一般情况下我们会这么删除

DataTable dt = new DataTable();
for (int i = 0; i < dt.Rows.Count; i++)
{
    if (99 % i == 0)
    {
        dt.Rows.RemoveAt(i);
    }
}

但是这么删除会出现意外情况
当运行dt.Rows.RemoveAt(i)代码后DataTable的index会发生改变
且他的dt.Rows.Count也会改变
(1)正确做法一

for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
    if (99 % i == 0)
    {
        dt.Rows.RemoveAt(i);
    }
}

(2)正确做法二

for (int i = 0; i < dt.Rows.Count; i++)
{
    if (99 % i == 0)
    {
        dt.Rows[i].Delete();
    }
}
dt.AcceptChanges();//提交
//dt.RejectChanges();//回滚
posted @ 2020-04-20 21:35  我有我奥妙  阅读(1176)  评论(0)    收藏  举报