C# 如何计算datagridview列中的唯一值?
我需要计算一列的行数,除了重复的行 门牌号 123 124 11 12 11 十一, 总门牌号:4 我已经搜索了,但找不到适合我的代码的语法。 我试过使用字典,但它似乎不适合我的代码 我是c语言的初学者C# 如何计算datagridview列中的唯一值?,c#,visual-studio,winforms,C#,Visual Studio,Winforms,我需要计算一列的行数,除了重复的行 门牌号 123 124 11 12 11 十一, 总门牌号:4 我已经搜索了,但找不到适合我的代码的语法。 我试过使用字典,但它似乎不适合我的代码 我是c语言的初学者 //Total House int House = 0; for (int row = 0; row < dataGridView1.Rows.Count; ++row) {
//Total House
int House = 0;
for (int row = 0; row < dataGridView1.Rows.Count; ++row)
{
if ((string)dataGridView1.Rows.[row].Cells("House_Number").Distinct())
{
House++;
}
}
TotalHouse.Text = "Total Houses " + $"{House}";
我尝试了上面的代码,但它预期有一个错误标识符。您可以通过向System.Data.DataSetExtensions添加nuget引用轻松实现这一点 然后使用linq选择不同的门牌号: var count=dataGridView1.AsEnumerable.Selectdr=>dr[House\u Number].Distinct.count 否则,您可以使用哈希集实现这一点:
var hs = new HashSet<string>();
foreach (DataRow dataRow in dataGridView1.Rows)
{
hs.Add(dataRow["House_Number"].ToString());
}
TotalHouse.Text = "Total Houses " + $"{hs.Count}";
您的代码有一些潜在的问题,但让我们从那些会阻止它编译的问题开始
if ((string)dataGridView1.Rows.[row].Cells("House_Number").Distinct())
这里有一个问题是行。[行]。那里不应该有经期。如果你有这样一个句点,C将期望它后面有一个标识符,而不是另一个操作符。在本例中,后面有[]运算符,这是无效的。它应该是这样的:
if ((string)dataGridView1.Rows[row].Cells("House_Number").Distinct())
int houses = dataGridView1.Rows
.Cast<DataGridViewRow>()
.Select(r => (int)r.Cells["House_Number"].Value)
.Distinct()
.Count();
我们越来越近了。但是,if语句中的测试必须计算为true或false的bool。您的计算结果为字符串,因为您正在将整个内容转换为字符串。这是因为此部分首先运行:
dataGridView1.Rows[row].Cells("House_Number").Distinct()
然后这部分运行:
(string)
所以整件事就成了一根绳子。我们必须去掉那个字符串位
让我们仔细看看dataGridView1.Rows[row].CellsHouse_Number.Distinct。细胞不是一种方法-。这意味着您不能使用CellsHouse_编号的语法。但是,单元格的结果是DataGridViewCellCollection,它允许[]语法,因此您可以执行类似于单元格[House_Number]的操作
Distinct不会给你一个布尔值,它会给你一个独特的单元格集合,它的形式叫做IEnumerable
dataGridView1.Rows[row].Cells.Distinct不会在列中提供不同的单元格,而是在行中提供不同的单元格。那可能不是你想要的
你可能会想要这样的东西:
if ((string)dataGridView1.Rows[row].Cells("House_Number").Distinct())
int houses = dataGridView1.Rows
.Cast<DataGridViewRow>()
.Select(r => (int)r.Cells["House_Number"].Value)
.Distinct()
.Count();
.Distinct可能也不适合您的循环代码。从错误代码开始。仔细阅读。关注这个问题,并且只关注它,直到它被修复为止,然后看看您编写的代码是否做了任何接近您想要的事情。手机号码应该是多少?单元格是一个集合还是一种方法?感谢您的详细解释,我将进一步研究IEnumerable。。现在返回到我的代码,它会给出一个错误,指定的强制转换无效