【问题标题】:Sort rows in datagridview by the sum of rows values按行值的总和对 datagridview 中的行进行排序
【发布时间】:2016-06-11 18:09:35
【问题描述】:

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

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

【问题讨论】:

  • 例如,我有 datagridview link 并且单元格的值为真或假。需要对真实值最多的行进行排序,并按降序排列
  • datasource是Access数据表。连接数据 - 添加数据源
  • datagridview 只读

标签: c# winforms datagridview


【解决方案1】:

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

  • 您可以加载从数据库中排序的数据。
  • 您可以通过将计算列添加到 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;

【讨论】:

  • 带有链接的选项很好,但我不明白如何替换“表格”。我只有绑定源、datagridview 和 tableadapter
  • 类似这样的东西:var temp= this.dataSet1.SomeTable.Clone(); 最后是this.bindingSource1.DataSource= temp;
猜你喜欢
  • 2020-04-14
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
相关资源
最近更新 更多