2012-06-05 32 views
4

我需要在dataGridView中計數並呈現不同值/唯一值。 我想這樣呈現,而且這個代碼在列表中工作得很好。使用.NET中的linq計算dataGridView中列的不同值

 List<string> aryIDs = new List<string>(); 
     aryIDs.Add("1234"); 
     aryIDs.Add("4321"); 
     aryIDs.Add("3214"); 
     aryIDs.Add("1234"); 
     aryIDs.Add("4321"); 
     aryIDs.Add("1234"); 

     var result= aryIDs.GroupBy(id => id).OrderByDescending(id => id.Count()).Select(g => new { Id = g.Key, Count = g.Count() }); 

但是,當我嘗試的dataGridView使用相同的方法在專欄中,我得到一個錯誤,指出GROUPBY不能在我的dataGridView使用。

 DataGridView dataGridView1= new DataGridView(); 
     dataGridView1.Columns.Add("nr", "nr"); 
     string[] row1 = new string[] { "1234" }; 
     string[] row2 = new string[] { "4321" }; 
     string[] row3 = new string[] { "3214" }; 
     string[] row4 = new string[] { "1234" }; 
     string[] row5 = new string[] { "4321" }; 
     string[] row6 = new string[] { "1234" }; 

     object[] rows = new object[] { row1, row2, row3, row4, row5, row6 }; 

     foreach (string[] rowArray in rows) 
     { 
      dataGridView1.Rows.Add(rowArray); 
     } 

     var result = dataGridView1.GroupBy(id => id).OrderByDescending(id => id.Count()).Select(g => new { Id = g.Key, Count = g.Count() }); 

所以我的問題是,我該如何適應這個linq語法來處理dataGridView中的列?如果可能的話,我根本不想使用列表。

回答

12

這會爲你的工作,例如:

var result = dataGridView1.Rows.Cast<DataGridViewRow>() 
    .Where(r => r.Cells[0].Value != null) 
    .Select (r => r.Cells[0].Value) 
    .GroupBy(id => id) 
     .OrderByDescending(id => id.Count()) 
     .Select(g => new { Id = g.Key, Count = g.Count() }); 
3

我認爲這樣做,但我不是100%確定。試試吧,如果你有任何問題,讓我知道...

var distinctRows = (from GridViewRow row in dataGridView1.Rows 
        select row.Cells[0] 
        ).Distinct().Count(); 
+0

它會計算所有不同的值,但不是每個的計數這是OP在列表示例中做的不同值 –

+1

這對我有幫助,但它應該來自'DataGridViewRow'和'row.Cells [0] .Value' – StevenWhite

相關問題