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也会改变
//正确做法一
for(int i = dt.Rows.Count - 1; i >= 0; i--)
{
    if(99 % i == 0)
    {
        dt.Rows.RemoveAt(i);
    }
}
//正确做法二
for(int i = 0; i < dt.Rows.Count; i++)
{
    if(99 % i == 0)
    {
        dt.Rows[i].Delete();
    }
}
dt.AcceptChanges(); //提交
//dt.RejectChanges();//回滚

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM