c# - 在没有新按钮的情况下从 Datagridview 中删除重复的行
问题描述
我有一个 datagridview,它有两列,我从我的 SQL-Server 表(3 列)中获取它的值。是否可以在不使用新按钮的情况下删除重复行?
这是我的代码:
foreach (DataRow r in d.Rows)
{
dgw.Rows.Add(r["c1"].ToString() + " " + r["c2"].ToString(), r["c3"]);
}
谢谢您的回答...
编辑:我需要 C# 代码的答案,而不是 sql。
解决方案
您希望避免在数据网格视图中显示重复记录,那么为什么在查询数据时不只选择那些不同的记录。
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
是数据网格视图中的列。c1
,c2
并且c3
是数据表中的列
推荐阅读
- python - Python 中 sqlite 的 NoSQL 替代方案
- linux - 如何在 Linux 中查找占用磁盘空间的文件
- node.js - 将 SQL 翻译成 knex
- github - 在 GitHub 上查找具有特定文件类型的所有文件
- c# - unity c# 中的“for”循环延迟
- haskell - 隐式调用函数
- clojure - 如何反向减少以便从最后一个索引迭代直到 0 索引?
- scala - Maven Jar 文件找不到主类
- java - 使用 ByteArrayOutputStream 和 BufferedOutputStream 来避免内存问题,这是个好主意吗?
- python - 如何计算一个值在字典中出现的次数?