我有DataGridView
,并且单元格的值为bool
true
或false
。我需要根据真值的计数对行进行排序。具有最多真实单元格的行应位于顶部,而具有最少真值的行应位于底部。
数据位于Access数据库中,我使用TableAdapter
加载数据。
答案 0 :(得分:0)
您可以使用以下任一选项:
DataTable
来对数据进行排序。使用DataTable的计算列
向表中添加新列,并设置列的Expression
。然后使用数据表的DefaultView.Sort
属性对表进行排序:
table.Columns.Add("Value4", typeof(int),
"Convert(ISNULL(Value1,false), 'System.Int32') + " +
"Convert(ISNULL(Value2,false), 'System.Int32') + " +
"Convert(ISNULL(Value3,false), 'System.Int32')" );
table.DefaultView.Sort = "Value4 DESC";
this.dataGridView1.DataSource = table;
使用Linq
您可以使用OrderByDescending
根据行中的真值计数对行进行排序:
var temp = table.Clone();
table.Rows.Cast<DataRow>()
.OrderByDescending(x => x.ItemArray.OfType<bool>().Count(b=>b==true))
.ToList().ForEach(x =>
{
temp.Rows.Add(x.ItemArray);
});
this.dataGridView1.DataSource = temp;