次の2つの方法でデータテーブルをソートしようとしました
table.DefaultView.Sort = "Town ASC, Cutomer ASC"
table.Select("", "Town ASC, Cutomer ASC")
しかし、どれもうまくいきませんでした。データは常に元の順序で表示されます。問題を解決するアイデアはありますか。
これは、新しい変数を作成せずに DataTable を並べ替えることができる最短の方法でした。
DataTable.DefaultView.Sort = "ColumnName ASC"
DataTable = DataTable.DefaultView.ToTable
どこ:
ASC - 昇順
DESC - 降順
ColumnName - ソートする列
DataTable - 並べ替えたいテーブル
これを試して:
Dim dataView As New DataView(table)
dataView.Sort = " AutoID DESC, Name DESC"
Dim dataTable AS DataTable = dataView.ToTable()
DefaultView ( table.DefaultView.Sort = "Town ASC, Cutomer ASC"
) で並べ替え式を設定した後、DataTable インスタンス自体ではなく、DefaultView を使用してテーブルをループする必要があります。
foreach(DataRowView r in table.DefaultView)
{
//... here you get the rows in sorted order
Console.WriteLine(r["Town"].ToString());
}
代わりに DataTable の Select メソッドを使用すると、DataRow の配列が生成されます。この配列は、DataTable ではなく、リクエストからソートされます
DataRow[] rowList = table.Select("", "Town ASC, Cutomer ASC");
foreach(DataRow r in rowList)
{
Console.WriteLine(r["Town"].ToString());
}
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);
}
}