2016-06-11 212 views
1

我有DataGridView並且單元格的值爲booltruefalse。我需要根據具有真值的計數對行進行排序。具有最多真實單元格的行應該在頂部,並且具有最低真實值的行應該在底部。在datagridview中對行進行排序值

數據在Access數據庫中,我使用TableAdapter加載數據。

enter image description here

+0

例如,我有datagridview [鏈接](http://imgur.com/8lwkE2z),單元格的值爲true或false。需要對具有最多真值的行進行排序,並按降序排列 – bfdbndfnd

+0

datasource是Access數據表。在數據連接 - 添加數據源 – bfdbndfnd

+0

datagridview只讀 – bfdbndfnd

回答

0

您可以使用這些選項:

  • 您可以加載數據庫排序的數據。
  • 您可以通過將計算列添加到DataTable來對數據進行排序。
  • 您可以使用linq排序數據。

使用的數據表

計算列添加一個新列到表中,並設置列的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; 
+0

選項與鏈接是好的,但我不明白我如何替換「表」。我只有綁定源,datagridview和tableadapter – bfdbndfnd

+0

像這樣:'var temp = this.dataSet1.SomeTable.Clone();'最後'this.bindingSource1.DataSource = temp;' –