2012-03-07 169 views
0

该怎么做?如何计算C#中的Datagridview中的重复项#

我已经源泉这段代码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],其中我是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: "); 

     } 

回答

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将包含三个元素:

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] } 
+0

TNX,这是工作:)但有可能在各行要知道重复发生? – Elfoc 2012-03-07 17:20:40

+0

@Elfoc:检查我的编辑是否是你需要的。 (可能有一些语法错误,因为我没有测试它) – digEmAll 2012-03-07 17:55:15

+0

我得到的消息:值:{Value = Test1,Count = 3,Rows = System.Collections.Generic.List'1 [System.Windows.Forms .DataDgridViewRow]}计数:1 //检查我的主题中的编辑 – Elfoc 2012-03-07 18:11:37