sorting数据表中的行

我们在DataTable有两列,如下所示:

 COL1 COL2 Abc 5 Def 8 Ghi 3 

我们试图按降序排列这个基于COL2的数据表。

 COL1 COL2 ghi 8 abc 4 def 3 jkl 1 

我们试过这个:

 ft.DefaultView.Sort = "occr desc"; ft = ft.DefaultView.ToTable(true); 

但是,不使用DataView ,我们想对DataTable本身进行sorting,而不是DataView

恐怕你不能轻易地就像你想要做的那样简单地做一个DataTable。

你可以做的是从你的DataTable创build的DataView创build一个新的DataTable。 在DataView上应用所需的任何sorting和/或filter,然后使用DataView.ToTable方法从DataView创build一个新的DataTable:

  DataView dv = ft.DefaultView; dv.Sort = "occr desc"; DataTable sortedDT = dv.ToTable(); 

或者,如果您可以使用DataGridView ,则可以调用Sort(column, direction)

 namespace Sorter { using System; using System.ComponentModel; using System.Windows.Forms; public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.dataGridView1.Rows.Add("Abc", 5); this.dataGridView1.Rows.Add("Def", 8); this.dataGridView1.Rows.Add("Ghi", 3); this.dataGridView1.Sort(this.dataGridView1.Columns[1], ListSortDirection.Ascending); } } } 

这会给你想要的结果:

调试器视图

它的简单使用。selectfunction。

 DataRow[] foundRows=table.Select("Date = '1/31/1979' or OrderID = 2", "CompanyName ASC"); DataTable dt = foundRows.CopyToDataTable(); 

这样做了……快乐编码

您是否尝试使用DataTable上的Select(filterExpression, sortOrder)方法? 看这里的例子。 请注意,此方法不会对数据表进行sorting,如果这是您正在查找的内容,但它将返回sorting的数组行,而不使用数据视图。

也许以下可以帮助:

 DataRow[] dataRows = table.Select().OrderBy(u => u["EmailId"]).ToArray(); 

在这里,您也可以使用其他Lambdaexpression式查询。

  table.DefaultView.Sort = "[occr] DESC"; 

事实certificate,这是可以实现的特殊情况。 诀窍是在构buildDataTable时,收集列表中的所有行,对它们进行sorting,然后添加它们。 这个案子刚刚出现在这里。

//希望对你有帮助..

  DataTable table = new DataTable(); //DataRow[] rowArray = dataTable.Select(); table = dataTable.Clone(); for (int i = dataTable.Rows.Count - 1; i >= 0; i--) { table.ImportRow(dataTable.Rows[i]); } return table; 

这将帮助你…

 DataTable dt = new DataTable(); dt.DefaultView.Sort = "Column_name desc"; dt = dt.DefaultView.ToTable(); 

有两种方法来sorting数据

1)对数据进行sorting并填入网格:

 DataGridView datagridview1 = new DataGridView(); // for show data DataTable dt1 = new DataTable(); // have data DataTable dt2 = new DataTable(); // temp data table DataRow[] dra = dt1.Select("", "ID DESC"); if (dra.Length > 0) dt2 = dra.CopyToDataTable(); datagridview1.DataSource = dt2; 

2)sorting类似于网格列标题的默认视图:

 DataGridView datagridview1 = new DataGridView(); // for show data DataTable dt1 = new DataTable(); // have data dt1.DefaultView.Sort = "ID DESC"; datagridview1.DataSource = dt1; 

尝试这个:

 DataTable DT = new DataTable(); DataTable sortedDT = DT; sortedDT.Clear(); foreach (DataRow row in DT.Select("", "DiffTotal desc")) { sortedDT.NewRow(); sortedDT.Rows.Add(row); } DT = sortedDT; 

TL; DR

使用tableObject.Select(queryExpression, sortOrderExpression)以sorting的方式select数据

完整的例子

完整的工作示例 – 可以在控制台应用程序中进行testing:

  using System; using System.Data; namespace A { class Program { static void Main(string[] args) { DataTable table = new DataTable("Orders"); table.Columns.Add("OrderID", typeof(Int32)); table.Columns.Add("OrderQuantity", typeof(Int32)); table.Columns.Add("CompanyName", typeof(string)); table.Columns.Add("Date", typeof(DateTime)); DataRow newRow = table.NewRow(); newRow["OrderID"] = 1; newRow["OrderQuantity"] = 3; newRow["CompanyName"] = "NewCompanyName"; newRow["Date"] = "1979, 1, 31"; // Add the row to the rows collection. table.Rows.Add(newRow); DataRow newRow2 = table.NewRow(); newRow2["OrderID"] = 2; newRow2["OrderQuantity"] = 2; newRow2["CompanyName"] = "NewCompanyName1"; table.Rows.Add(newRow2); DataRow newRow3 = table.NewRow(); newRow3["OrderID"] = 3; newRow3["OrderQuantity"] = 2; newRow3["CompanyName"] = "NewCompanyName2"; table.Rows.Add(newRow3); DataRow[] foundRows; Console.WriteLine("Original table's CompanyNames"); Console.WriteLine("************************************"); foundRows = table.Select(); // Print column 0 of each returned row. for (int i = 0; i < foundRows.Length; i++) Console.WriteLine(foundRows[i][2]); // Presuming the DataTable has a column named Date. string expression = "Date = '1/31/1979' or OrderID = 2"; // string expression = "OrderQuantity = 2 and OrderID = 2"; // Sort descending by column named CompanyName. string sortOrder = "CompanyName ASC"; Console.WriteLine("\nCompanyNames data for Date = '1/31/1979' or OrderID = 2, sorted CompanyName ASC"); Console.WriteLine("************************************"); // Use the Select method to find all rows matching the filter. foundRows = table.Select(expression, sortOrder); // Print column 0 of each returned row. for (int i = 0; i < foundRows.Length; i++) Console.WriteLine(foundRows[i][2]); Console.ReadKey(); } } } 

产量

产量