按行总和值对datagridview中的行进行排序

时间:2016-06-11 18:09:35

标签: c# winforms datagridview

我有DataGridView,并且单元格的值为bool truefalse。我需要根据真值的计数对行进行排序。具有最多真实单元格的行应位于顶部,而具有最少真值的行应位于底部。

数据位于Access数据库中,我使用TableAdapter加载数据。

enter image description here

1 个答案:

答案 0 :(得分:0)

您可以使用以下任一选项:

  • 您可以加载从数据库中排序的数据。
  • 您可以通过将计算列添加到DataTable来对数据进行排序。
  • 您可以使用linq对数据进行排序。

使用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;