23

我有一个DataTable如下所示;

|              ID                    | ItemIndex |   ItemValue
ce895bd9-9a92-44bd-8d79-986f991154a9     1            3
ae7d714e-a457-41a8-8bb4-b5a0471c3d2f     2            2
a774dff3-acc0-4f50-a211-a775e28dcae3     2            1
292bbd50-290b-4511-9e4e-2e74e3ebe273     3            2
ae7d714e-a457-41a8-8bb3-b5a0471c3d22     3            1

我想先对这个表进行排序ItemIndex,然后再对排序后的表进行排序ItemValue

我怎样才能做到这一点?

编辑:排序后,我想要下面的表格;

|              ID                    | ItemIndex |   ItemValue
ce895bd9-9a92-44bd-8d79-986f991154a9     1            3
a774dff3-acc0-4f50-a211-a775e28dcae3     2            1
ae7d714e-a457-41a8-8bb4-b5a0471c3d2f     2            2
ae7d714e-a457-41a8-8bb3-b5a0471c3d22     3            1
292bbd50-290b-4511-9e4e-2e74e3ebe273     3            2
4

7 回答 7

40

您可以使用LINQ 到 DataSet/DataTable

var newDataTable = yourtable.AsEnumerable()
                   .OrderBy(r=> r.Field<int>("ItemIndex"))
                   .ThenBy(r=> r.Field<int>("ItemValue"))  
                   .CopyToDataTable();
于 2013-04-30T14:55:49.523 回答
31

创建一个DataView并使用 Sort 属性:

DataView dv = new DataView(dt);
dv.Sort = "ItemIndex, ItemValue";

例如

foreach (DataRowView row in dv) {
   Console.WriteLine(" {0} \t {1}", row["ItemIndex"], row["ItemValue"]);
}

有关更多信息,请查看 MDSN 以获得更详尽的示例:

http://msdn.microsoft.com/en-us/library/system.data.dataview.sort.aspx

于 2013-04-30T14:56:08.643 回答
23

在 datatable 对象上,只需获取 defaultview 对象并设置排序即可。

dataTable.DefaultView.Sort = "ItemIndex, ItemValue";
于 2013-04-30T20:04:11.137 回答
11

通过创建数据视图

var dataView = new DataView(dataTable);
dataView.Sort = "ItemIndex ASC, ItemValue ASC"

这里 dataTable 是你要排序的表

于 2013-04-30T14:58:44.823 回答
3

或者,您可以使用它

DataView oDataSet;
oDataSet.Tables[0].DefaultView.Sort = "Column1 ASC ";
于 2017-01-25T12:44:51.400 回答
1
_UserAuditTrailTable.DefaultView.Sort = sortExpression;
于 2017-02-14T12:01:37.400 回答
0

鉴于此处其他人的有用评论,这是我的看法。

DataView dataView = new DataView(dataTable);//datatable to dataview
dataView.Sort = "columnName1 ASC, columnName2 DESC";//string that contains the column name  followed by "ASC" (ascending) or "DESC" (descending)
dataTable = dataView.ToTable();//push the chages back to the datatable
于 2020-05-11T12:53:51.213 回答