如何给DataTable反向排序?

DataTable 有没有隐藏列存index ?

以前用sqlite的时候,有个隐藏列rowid ,标记每一行。

不知道DataTable有没有这样的概念,
主要是想反向排序rows , 如果有这样的隐藏列,可以利用Select或者DataView的sort 来排序,比如sort= "rowid DESC"

没有类似的功能,如果你希望倒序Datatable,可以尝试使用 LINQ 查询和 Reverse() 方法来实现。

var reversedRows = dataTable.AsEnumerable().Reverse();
DataTable reversedTable = dataTable.Clone();
foreach (DataRow row in reversedRows)
{
    reversedTable.ImportRow(row);
}
DataTable table = new DataTable();  
table.Columns.Add("Column1", typeof(int));  
table.Columns.Add("Column2", typeof(string));

table.Rows.Add(1, "A");  
table.Rows.Add(2, "B");  
table.Rows.Add(3, "C");  
table.Rows.Add(4, "D");

DataView view = new DataView(table);  
view.Sort = "Column2 DESC";

foreach (DataRow row in view.Rows)  
{
    Console.WriteLine(row["Column1"] + " " + row["Column2"]);  
}


在.NET Framework中,DataTable类没有内置的隐藏列存储索引的概念,类似于SQLite的rowid。不过,你可以通过添加一个额外的列来模拟这个行为,以便进行反向排序。

以下是使用C#示例代码来反向排序DataTable的行:

using System;
using System.Data;

class Program
{
    static void Main()
    {
        // 创建一个示例的DataTable
        DataTable dataTable = new DataTable("MyTable");
        dataTable.Columns.Add("ID", typeof(int));
        dataTable.Columns.Add("Name", typeof(string));

        // 添加一些示例数据
        dataTable.Rows.Add(1, "John");
        dataTable.Rows.Add(2, "Jane");
        dataTable.Rows.Add(3, "Mike");

        // 添加一个隐藏列存储索引
        DataColumn indexColumn = new DataColumn("Index", typeof(int));
        dataTable.Columns.Add(indexColumn);

        // 为隐藏列填充数据
        for (int i = 0; i < dataTable.Rows.Count; i++)
        {
            dataTable.Rows[i]["Index"] = i;
        }

        // 使用DataView进行反向排序
        DataView dataView = dataTable.DefaultView;
        dataView.Sort = "Index DESC";

        // 打印排序后的结果
        foreach (DataRowView rowView in dataView)
        {
            DataRow row = rowView.Row;
            Console.WriteLine($"ID: {row["ID"]}, Name: {row["Name"]}");
        }
    }
}


在这个示例中,我们添加了一个名为"Index"的隐藏列来存储索引,并为每一行填充了递增的索引值。然后,我们使用DataView的Sort属性对隐藏列进行反向排序,以达到反向排序DataTable行的目的。

请注意,这只是一种模拟的方法,而不是DataTable内置的功能。你需要确保在添加、删除或重新排序行时,及时更新隐藏列的索引值。