你如何sorting一个DataTable列和方向?

我需要在内存中根据来自GridView的列和方向使用DataTable。 该function需要如下所示:

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

我需要填写这个function的帮助。 我想我可以使用Select语句,但我不知道如何。 我无法点击评论,因为这个浏览器,但你可以给我一个就地或新的DataTable解决scheme,任何一个。 请给我看指针的人,我需要一个类似于原型的编码函数。

怎么样:

 // 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; } 

我假设“方向”是“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; } 

或者不创builddtOut

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

如果你只有一个DataView,你可以使用它来进行sorting:

 table.DefaultView.Sort = "columnName asc"; 

还没有尝试过,但我想你可以做任何数量的DataViews,只要你引用正确的。

其实也有同样的问题。 对我来说这是一个简单的方法:

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

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

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

但是,Select调用的返回值不是DataTable,而是RowData对象的数组。 如果你想从你的函数返回一个DataTable,你将不得不从头开始构build它的数据数组。 这里是一个地址,并提供这两个问题的示例: http : //social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/157a4a0f-1324-4301-9725-3def95de2bf2/

创build一个DataView 。 您不能直接对DataTable进行sorting,但可以从DataTable创build一个DataView并对其进行sorting。

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

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

以下代码示例创build一个视图,显示库存单位数量小于或等于再订购级别的所有产品,首先按供应商IDsorting,然后按产品名称sorting。

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

如果你想在多个方向sorting

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