我需要在内存中使用基于来自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;
}
答案 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;
}