C# 在datagridview中对列进行排序

C# 在datagridview中对列进行排序,c#,winforms,datagridview,C#,Winforms,Datagridview,在主题中,我询问了如何根据行中的值之和对行进行排序。解决办法是: var temp = myDataBaseDataSet.table1.Clone(); myDataBaseDataSet.table1.Rows.Cast<DataRow>() .OrderByDescending(x => x.ItemArray.OfType<bool>().Count(b => b == true)) .ToList().ForEach(x =>

在主题中,我询问了如何根据行中的值之和对行进行排序。解决办法是:

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;
var temp=myDataBaseDataSet.table1.Clone();
myDataBaseDataSet.table1.Rows.Cast()
.OrderByDescending(x=>x.ItemArray.OfType().Count(b=>b==true))
.ToList().ForEach(x=>
{
临时行添加(x.ItemArray);
});
this.table1DataGridView.DataSource=temp;
现在有一个可能很愚蠢的新问题:如何像上面示例中的行那样对列进行排序?简单地说,更改列的顺序(但保存列值)

我试着申请一个例子。首先,我按照前面所写的方式对行进行排序。然后我需要根据列的值之和交换列,并且它们应该按降序排列(如屏幕截图上)

您可以首先从
数据表
中根据列中选中项目的计数获取列的有序列表。然后从网格中删除相应的列,并按以下顺序添加它们:

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();
    }
});
var columns=dt.columns.Cast()
.其中(x=>x.DataType==typeof(bool))
.选择(x=>new
{
列=x,
Count=dt.Rows.Cast()
.Count(r=>r.Field(x)=true)
}).OrderByDescending(x=>x.Count)
.Select(x=>x.Column).ToList();
columns.ForEach(x=>
{
var column=grid.Columns.Cast()
.Where(c=>c.DataPropertyName==x.ColumnName)
.FirstOrDefault();
if(列!=null)
{
grid.Columns.Remove(column);
添加((DataGridViewColumn)column.Clone());
column.Dispose();
}
});