3列の次のデータテーブルがあります。
2番目の列に基づいてデータテーブル行をソートしたい(ヘッダーE付き)これを行う組み込み関数はありますか?
私は試した..
dt.DefaultView.Sort = dt.Columns[1].ColumnName;
dt.AcceptChanges();
おそらく最も簡単な (そして最も強力な) 方法は、Linq-To-DataSet
andを使用することEnumerable.OrderBy
です。
var tblOrdered = tbl.AsEnumerable()
.OrderBy(row => row.Field<int>("E"))
.CopyToDataTable();
Linq を使用できない場合は、以下を使用できますDataView.Sort
。
DataView view = tbl.DefaultView;
view.Sort = "E ASC";
しかし、それは a を使用しDataView
、元DataTable
はソートされていません。
したがって、テーブルが必要な場合は、次を使用できますDataView.ToTable
。
tbl = view.ToTable();
データブルを列で並べ替えることができます
dt.DefaultView.Sort = "E Asc";
そうでなければ、このように
string[] names = new string[dt.Rows.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
names[i] = dt.Rows[i]["E"].ToString();
}
Array.Sort(names);
for (int i = 0; i < dt.Rows.Count; i++)
{
dt.Rows[i]["E"] = names[i];
}
またdt.AcceptChanges
、テーブルに加えられたすべての変更をコミットします。aah msdnは、更新を試みた後に呼び出す必要があるとも言っています
MSDNからのコメント
AcceptChangesが呼び出されると、編集モードのままのDataRowオブジェクトは編集を正常に終了します。DataRowStateも変更されます。追加された行と変更された行はすべてUnchangedになり、削除された行は削除されます。
AcceptChangesメソッドは通常、DbDataAdapter.Updateメソッドを使用してDataSetを更新しようとした後、DataTableで呼び出されます。