C#中Datatable删除行的一个不解之处

C#把Datatable中重复的行删除后绑定DataGridView,发现没变,不清楚是什么情况,各位帮忙看看。代码如下:
for(int i=0;i<dt.rows.count;i++)
{
for(int j=0;j<dt.rows.count;j++)
{
if(dt.rows[j][2].tostring()==dt.rows[i][2].tostring())
{
dt.rows[j].delete();
dt.AccpetChanges();
}
}
}

datagridview1.datasource=dt;

5个回答

你这是在干嘛?删除表?

if(dt.rows[j][2].text.tostring()==dt.rows[i][2].text.tostring())

首先,这个循环体写的就有问题,个人觉得至少应该修改为如下的。
另外,检测一下 delete 和 AcceptChanges 函数的返回,看看执行是否成功。
最后,是大的逻辑问题:如果 j 被删除, count 会变化(减一),这样做循环是否有访问越界的可能性!

for(int i=0;i<dt.rows.count;i++)
{
for(int j=i + 1;j<dt.rows.count;j++)    /// 修改处
{
if(dt.rows[j][2].tostring()==dt.rows[i][2].tostring())
{
dt.rows[j].delete();
dt.AccpetChanges();
}
}
}
datagridview1.datasource=dt; 

用rows.remove()啊。

 DataRow[] todel = dt.Rows.OfType<DataRow>.GroupBy(x => x[2].ToString()).SelectMany(x => x.Skip(1)).ToArray();
foreach (var item in todel)
    item.Delete();
dt.AcceptChanges();
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐