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

时间:2011-02-15 15:31:23

标签: c# ado.net datatable

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

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

    ....
}

我需要帮助填写此功能。我想我可以使用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;
   }

6 个答案:

答案 0 :(得分:104)

我假设“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;
}

或者不创建dtOut

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

答案 1 :(得分:65)

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

table.DefaultView.Sort = "columnName asc";

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

答案 2 :(得分:14)

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

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

dt.DefaultView.Sort = "columnname";
dt = dt.DefaultView.ToTable();

答案 3 :(得分: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/

答案 4 :(得分:4)

创建 DataView 。您无法直接对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);

答案 5 :(得分:2)

如果您想要在多个方向排序

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