Как сортировать DataTable по двум столбцам в С#
У меня есть 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
Ответы
Ответ 1
Вы можете использовать LINQ to DataSet/DataTable
var newDataTable = yourtable.AsEnumerable()
.OrderBy(r=> r.Field<int>("ItemIndex"))
.ThenBy(r=> r.Field<int>("ItemValue"))
.CopyToDataTable();
Ответ 2
Создайте DataView и используйте свойство Сортировка:
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
Ответ 3
В объекте данных просто выберите объект по умолчанию и задайте сортировку.
dataTable.DefaultView.Sort = "ItemIndex, ItemValue";
Ответ 4
Создав dataview
var dataView = new DataView(dataTable);
dataView.Sort = "ItemIndex ASC, ItemValue ASC"
Здесь dataTable - таблица, которую вы хотите отсортировать
Ответ 5
В качестве альтернативы вы можете использовать этот
DataView oDataSet;
oDataSet.Tables[0].DefaultView.Sort = "Column1 ASC ";
Ответ 6
_UserAuditTrailTable.DefaultView.Sort = sortExpression;