如何根据列和方向对DataTable进行排序?

Sam*_*ile 71 c# datatable ado.net

我需要在内存中使用基于来自GridView的列和方向的DataTable.该函数需要如下所示:

public static DataTable resort(DataTable dt, string colName, string direction)
{
    DataTable dtOut = null;

    ....
}
Run Code Online (Sandbox Code Playgroud)

我需要帮助填写这个功能.我想我可以使用Select语句,但我不知道如何.由于此浏览器,我无法点击评论,但您可以向我展示一个就地或新的DataTable解决方案.对于那些向我显示指针的人来说,我需要一个类似于原型的编码功能.

怎么样:

// ds.Tables[0].DefaultView.Sort="au_fname DESC";
   public static void Resort(ref DataTable dt, string colName, string direction)
   {
        string sortExpression = string.Format("{0} {1}", colName, direction);
        dt.DefaultView.Sort = sortExpression;
   }
Run Code Online (Sandbox Code Playgroud)

Ber*_*ncı 105

我假设"direction"是"ASC"或"DESC",dt包含一个名为"colName"的列

public static DataTable resort(DataTable dt, string colName, string direction)
{
    DataTable dtOut = null;
    dt.DefaultView.Sort = colName + " " + direction;
    dtOut = dt.DefaultView.ToTable();
    return dtOut;
}
Run Code Online (Sandbox Code Playgroud)

或者不创建dtOut

public static DataTable resort(DataTable dt, string colName, string direction)
{
    dt.DefaultView.Sort = colName + " " + direction;
    dt = dt.DefaultView.ToTable();
    return dt;
}
Run Code Online (Sandbox Code Playgroud)

  • 您还可以简化第二个代码块以简单地返回`dt.DefaultView.ToTable();`. (3认同)

Ale*_*lex 66

如果您只有一个DataView,则可以使用它进行排序:

table.DefaultView.Sort = "columnName asc";
Run Code Online (Sandbox Code Playgroud)

没试过,但我想你可以用任意数量的DataView做到这一点,只要你引用正确的.


Kᴀτ*_*ᴀτᴢ 14

实际上遇到了同样的问题.对我来说,这很简单:

将数据添加到a Datatable并对其进行排序:

dt.DefaultView.Sort = "columnname";
dt = dt.DefaultView.ToTable();
Run Code Online (Sandbox Code Playgroud)


Pau*_*sik 7

DataTables有一个重载的Select方法,你可以这样做.请参见此处:http://msdn.microsoft.com/en-us/library/way3dy9w.aspx

但是Select调用的返回值不是DataTable,而是RowData对象的数组.如果要从函数返回DataTable,则必须根据该数据数组从头开始构建DataTable.这是一篇文章,解决并提供了两个问题的示例:http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/157a4a0f-1324-4301-9725-3def95de2bf2/


Eva*_*ons 5

如果您想按多个方向排序

  public static void sortOutputTable(ref DataTable output)
        {
            DataView dv = output.DefaultView;
            dv.Sort = "specialCode ASC, otherCode DESC";
            DataTable sortedDT = dv.ToTable();
            output = sortedDT;
        }
Run Code Online (Sandbox Code Playgroud)


Jak*_*cki 4

创建一个数据视图。您不能直接对 DataTable 进行排序,但您可以从 DataTable 创建一个 DataView 并对其进行排序。

创建:http ://msdn.microsoft.com/en-us/library/hy5b8exc.aspx

排序:http ://msdn.microsoft.com/en-us/library/13wb36xf.aspx

以下代码示例创建一个视图,显示库存数量小于或等于再订购水平的所有产品,首先按供应商 ID 排序,然后按产品名称排序。

DataView prodView = new DataView(prodDS.Tables["Products"], "UnitsInStock <= ReorderLevel", "SupplierID, ProductName", DataViewRowState.CurrentRows);