2016-06-13 118 views
1

this主題中,我問如何按行中的值的總和對行進行排序。解決的辦法是這樣的:在datagridview中對列進行排序

var temp = myDataBaseDataSet.table1.Clone(); 
myDataBaseDataSet.table1.Rows.Cast<DataRow>() 
    .OrderByDescending(x => x.ItemArray.OfType<bool>().Count(b => b == true)) 
    .ToList().ForEach(x => 
    { 
     temp.Rows.Add(x.ItemArray); 
    }); 
this.table1DataGridView.DataSource = temp; 

現在有一個新的,也許愚蠢的問題:如何像上面例子中列的列進行排序?簡單地說,要改變列的順序(但保存列值)

我試圖爲一個例子做一個應用程序。首先我按照已經寫好的行進行排序。然後,我需要在列的值的總和交換柱,它們應該被放置在降序排列(如在截圖)的 Example of what i need

回答

1

您可以先得到基於計數從DataTable列的有序列表在列中檢查項目。然後從網格中刪除相應的列並按順序添加它們:

var columns = dt.Columns.Cast<DataColumn>() 
       .Where(x => x.DataType == typeof(bool)) 
       .Select(x => new 
       { 
        Column = x, 
        Count = dt.Rows.Cast<DataRow>() 
           .Count(r => r.Field<bool>(x) == true) 
       }).OrderByDescending(x => x.Count) 
       .Select(x => x.Column).ToList(); 

columns.ForEach(x => 
{ 
    var column = grid.Columns.Cast<DataGridViewColumn>() 
        .Where(c => c.DataPropertyName == x.ColumnName) 
        .FirstOrDefault(); 
    if (column != null) 
    { 
     grid.Columns.Remove(column); 
     grid.Columns.Add((DataGridViewColumn)column.Clone()); 
     column.Dispose(); 
    } 
});