在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;
现在有一个新的可能是一个愚蠢的问题:如何对列进行排序,就像上面的例子中的行一样?简单地说,要更改列的顺序(但保存列值)
我试图为一个例子制作一个应用程序。首先,我按照已经写过的方式对行进行排序。然后我需要通过列的值的总和交换列,它们应按降序排列(如截图)
答案 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();
}
});