首页 > 解决方案 > 在没有新按钮的情况下从 Datagridview 中删除重复的行

问题描述

我有一个 datagridview,它有两列,我从我的 SQL-Server 表(3 列)中获取它的值。是否可以在不使用新按钮的情况下删除重复行?

这是我的代码:

                    foreach (DataRow r in d.Rows)
                    {
                        dgw.Rows.Add(r["c1"].ToString() + " " + r["c2"].ToString(), r["c3"]);
                    }

谢谢您的回答...

编辑:我需要 C# 代码的答案,而不是 sql。

标签: c#datagridviewduplicatesrow

解决方案


您希望避免在数据网格视图中显示重复记录,那么为什么在查询数据时不只选择那些不同的记录。

string q = "SELECT DISTINCT c1, c2, c3 FROM mytable......";

而不是迭代数据表中的每一行,您可以简单地使用类似DataSource的属性,DataTable

SqlDataAdapter s = new SqlDataAdapter(q, c);
DataTable d = new DataTable();
s.Fill(d);
dgw.DataSource = dt;

编辑1:

您可以在将其添加到数据网格视图之前检查该行,例如

foreach (DataRow r in d.Rows)
{
    bool existingRow = dgw.Rows
                          .Cast<DataGridViewRow>().AsEnumerable()
                          .Any(x =>
                                Convert.ToString(x.Cells["Column1"].Value).Split(' ')[0] == r["c1"].ToString() &&
                                Convert.ToString(x.Cells["Column1"].Value).Split(' ')[1] == r["c2"].ToString() &&
                                Convert.ToInt32(x.Cells["Column2"].Value) == Convert.ToInt32(r["c3"])
                           );

     if (!existingRow)
         dgw.Rows.Add(r["c1"].ToString() + " " + r["c2"].ToString(), r["c3"]);
}

在哪里:

  • Column1并且Column2是数据网格视图中的列。
  • c1c2并且c3是数据表中的列

推荐阅读