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(); } } }
产量