【问题标题】:How to Count Duplicates in Datagridview in C#如何在 C# 中计算 Datagridview 中的重复项
【发布时间】:2012-03-24 22:47:33
【问题描述】:

怎么做?

我在How to Count Duplicates in List with LINQ 找到了这段代码:

 var list = new List<string> { "a", "b", "a", "c", "a", "b" };

        var q = from x in list
                group x by x into g
                let count = g.Count()
                orderby count descending
                select new { Value = g.Key, Count = count };
        foreach (var x in q)
        {
            MessageBox.Show("Value: " + x.Value + " Count: " + x.Count);
        }

但是如何修改它以计算 datagridview 中的重复项?例如 datagridview1[7,i] 其中 i 是 datagriview 中的行数。

编辑

现在我的代码是这样的:

      var list = dataGridView1.Rows.OfType<DataGridViewRow>()
       .GroupBy(x => x.Cells["TestValues"].Value)
       .Select(g => new { Value = g.Key, Count = g.Count(), Rows = g.ToList() })
       .OrderByDescending(x => x.Count);

        var q = from x in list
                group x by x into g
                let count = g.Count()
                orderby count descending
                select new { Value = g.Key, Count = count };

        foreach (var x in q)
        {
           // dataGridView1[7, x].Value.ToString();

            MessageBox.Show("Value: " + x.Value + " Count: " + x.Count +"Rows: " );

        }

【问题讨论】:

    标签: c# winforms datagrid


    【解决方案1】:

    这样的事情应该可以工作:

    var list = myDataGridView.Rows.OfType<DataGridViewRow>()
               .Select(x => x.Cells["MYCOLUMN"].Value.ToString());
    var q = from x in list
        group x by x into g
        let count = g.Count()
        orderby count descending
        select new { Value = g.Key, Count = count };
    

    其中"MYCOLUMN" 是您想要的列的名称,或者,您可以传递列索引。

    编辑:

    此代码返回一个项目列表,其中还包含具有重复项的行列表:

    var q = myDataGridView.Rows.OfType<DataGridViewRow>()
            .GroupBy(x => x.Cells["MYCOLUMN"].Value.ToString())
            .Select(g => new {Value=g.Key, Count=g.Count(), Rows=g.ToList()})
            .OrderByDescending(x => x.Count);
    

    所以如果你有 5 行,例如:

    ID     MYCOLUMN
     0         A
     1         B
     2         C
     3         A
     4         B   
    

    q 将包含 3 个元素:

     Key="A", Count=2, Rows={ [0 - A] [3 - A]}
     Key="B", Count=2, Rows={ [1 - B] [4 - B]}
     Key="C", Count=1, Rows={ [2 - C] }
    

    【讨论】:

    • Tnx,这是有效的 :) 但是有可能知道每一行都发生了重复吗?
    • @Elfoc:检查我的编辑是否是您需要的。 (可能有一些语法错误,因为我没有测试它)
    • 我收到消息:值:{Value= Test1, Count = 3, Rows = System.Collections.Generic.List'1[System.Windows.Forms.DataDgridViewRow]} Count:1 / / 检查我的主题中的编辑
    • @Elfoc:对不起,我忘了提到我的最后一个代码已经包含了第二个查询(它基本上返回你所谓的“q”)。你不需要对它的结果进行分组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 2021-08-29
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多