fantasy19911002
fantasy19911002
2016-02-03 08:34
采纳率: 0%
浏览 2.6k

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条回答 默认 最新

  • qinghe1987
    qinghe1987 2016-02-03 08:54

    你这是在干嘛?删除表?

    点赞 评论
  • u014370904
    牛顿第一定律 2016-02-03 08:57

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

    点赞 评论
  • 91program
    91program 2016-02-03 09:01

    首先,这个循环体写的就有问题,个人觉得至少应该修改为如下的。
    另外,检测一下 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; 
    
    点赞 评论
  • sipoli1984
    Perentie 2016-02-03 09:25

    用rows.remove()啊。

    点赞 评论
  • caozhy
     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();
    
    点赞 评论

相关推荐