2016-06-13 101 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(); 
    } 
});