2012-06-05 3 views
4

DataGridView에서 고유 한 값을 세고 제시해야합니다. 이 코드를 이렇게 표시하고 싶습니다.이 코드는 목록과 잘 작동합니다. 내가있는 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() }); 

는하지만 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

관련 문제