Сортировка таблицы данных

Я попытался отсортировать таблицу данных следующими двумя способами.

table.DefaultView.Sort = "Town ASC, Cutomer ASC"

table.Select("", "Town ASC, Cutomer ASC")

Но никто из них не работал. Он всегда отображает данные в исходном порядке. У вас есть идея решить проблему.

Ответ 1

После установки выражения сортировки в DefaultView (table.DefaultView.Sort = "Town ASC, Cutomer ASC") вы должны перебирать таблицу, используя DefaultView, а не сам экземпляр DataTable

foreach(DataRowView r in table.DefaultView)
{
    //... here you get the rows in sorted order
    Console.WriteLine(r["Town"].ToString());
}

Вместо этого используется метод выбора DataTable, создается массив DataRow. Этот массив сортируется как от вашего запроса, а не от DataTable

DataRow[] rowList = table.Select("", "Town ASC, Cutomer ASC");
foreach(DataRow r in rowList)
{
    Console.WriteLine(r["Town"].ToString());
}

Ответ 2

Попробуйте следующее:

Dim dataView As New DataView(table)
dataView.Sort = " AutoID DESC, Name DESC"
Dim dataTable AS DataTable = dataView.ToTable()

Ответ 3

Это был самый короткий способ найти DataTable, не создавая никаких новых переменных.

DataTable.DefaultView.Sort = "ColumnName ASC"
DataTable = DataTable.DefaultView.ToTable

Где:

ASC - Восходящий

DESC - По убыванию

ColumnName - столбец, который вы хотите отсортировать по

DataTable - таблица, которую вы хотите отсортировать

Ответ 4

private void SortDataTable(DataTable dt, string sort)
{
DataTable newDT = dt.Clone();
int rowCount = dt.Rows.Count;

DataRow[] foundRows = dt.Select(null, sort);
// Sort with Column name
for (int i = 0; i < rowCount; i++)
{
object[] arr = new object[dt.Columns.Count];
for (int j = 0; j < dt.Columns.Count; j++)
{
arr[j] = foundRows[i][j];
}
DataRow data_row = newDT.NewRow();
data_row.ItemArray = arr;
newDT.Rows.Add(data_row);
}

//clear the incoming dt
dt.Rows.Clear();

for (int i = 0; i < newDT.Rows.Count; i++)
{
object[] arr = new object[dt.Columns.Count];
for (int j = 0; j < dt.Columns.Count; j++)
{
arr[j] = newDT.Rows[i][j];
}

DataRow data_row = dt.NewRow();
data_row.ItemArray = arr;
dt.Rows.Add(data_row);
}
}