对数据表中的行进行排序

我们在 DataTable中有两列,像这样:

COL1   COL2
Abc    5
Def    8
Ghi    3

我们试图根据 COL2按照递减顺序对这个 datatable进行排序。

COL1            COL2
ghi             8
abc             4
def             3
jkl             1

我们试过了:

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

但是,在不使用 DataView的情况下,我们希望对 DataTable本身排序,而不是对 DataView排序。

544251 次浏览

您是否尝试过在 DataTable 上使用 Select(filterExpression, sortOrder)方法?有关示例,请参见 给你。注意,如果您正在寻找数据表,那么这个方法将不会对数据表进行排序,但是它将返回一个排序后的行数组,而不使用数据视图。

我恐怕您不能像您希望的那样轻松地执行就地数据表。

您可以从从原始 DataTable 创建的 DataView 中创建一个新的 DataTable。在 DataView 上应用任何您想要的排序和/或过滤器,然后使用 DataView.ToTable方法从 DataView 创建一个新的 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);
}
}
}

这会给你想要的结果:

Debugger view

事实证明,在一个特殊的情况下,这是可以实现的。诀窍是在构建 DataTable 时,收集列表中的所有行,对它们进行排序,然后添加它们。这个案子刚送到这里。

希望这能帮到你。

        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;

它的简单使用。选择函数。

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

完成了,编码愉快

也许以下几点能帮上忙:

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

在这里,您也可以使用其他的 Lambda 表达式查询。

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

试试这个:

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;

DR

使用 tableObject.Select(queryExpression, sortOrderExpression)以排序的方式选择数据

完整的例子

完整的 工作范例-可以在 控制台应用中测试:

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

输出

output

排序数据有两种方法

1)只对数据进行排序并填入网格:

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)排序默认视图,类似于网格列标题的排序:

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();
dt.DefaultView.Sort = "Column_name desc";
dt = dt.DefaultView.ToTable();

使用 LINQ-C # 的魅力

DataTable newDataTable = baseTable.AsEnumerable()
.OrderBy(r=> r.Field<int>("ColumnName"))
.CopyToDataTable();

是的,上面的答案描述了排序可数据表的正确方法

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

但是除此之外,为了在其中选择特定的行,您可以使用 LINQ 并尝试执行以下操作

var Temp = MyDataSet.Tables[0].AsEnumerable().Take(1).CopyToDataTable();