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;
你这是在干嘛?删除表?
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();