对datagridview中的列进行排序

时间:2016-06-13 13:19:21

标签: c# winforms datagridview

this主题中,我询问了如何按行中值的总和对行进行排序。解决方案是:

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 个答案:

答案 0 :(得分: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();
    }
});