DataTable.DefaultView.Sortで混乱しています。これが、使用したいコードのセグメントです。
actionLogDT.DefaultView.Sort = "StartDate";
foreach (CustomerService.ActionLogStartEndRow logRow in actionLogDT)
{
// code here
}
私が見たサンプルはforeachループを使用していないため、これを処理する方法について混乱しています。思ったとおりに並べ替えられていません。
.DefaultViewがビューを返し、.Tableがコンパイルエラーを返すことがわかります。
私は少し異なるアプローチを取る必要がありました。 この投稿 は、コードを機能させるために私が見つけた最も近いものでした。これが作業結果です:
actionLogDT.DefaultView.Sort = "StartDate";
DataView dv = actionLogDT.DefaultView;
foreach (DataRowView logRow in dv) { . . . }
そこから、値を適切な型にキャストし直す必要があります。
(string)logRow["Status"].ToString()
actionLogDT.DefaultView.Sort = "StartDate";
actionLogDT = actionLogDT.DefaultView.ToTable();
ビューを並べ替えても、テーブル内のデータの並べ替え順序は変更されません。ビュー内の順序だけが変更されます。代わりにビューでforeach
を実行し、DataRowViewからの行を厳密に型指定された行にキャストすると機能します。
foreach (DataRowView logRowView in actionLogDT.DefaultView)
{
CustomerService.ActionLogStartEndRow logRow = logRowView.Row as CustomerService.ActionLogStartEndRow;
// code here
}
さらに、レコードをループ処理したいと思ったので、dataRowView
のDefaultView
オブジェクトをループ処理するだけで済みます。
foreach (DataRowView drv in table.DefaultView)
{
string strValue = drv["ColumnName"].ToString();
// its also worth mentioning that a DataRowView has a Row
strValue = drv.Row["ColumnName"].ToString();
}
foreach (var logRow in actionLogDT.DefaultView.ToDataTable()) { ... }
これを試してください:
actionLogDT.DefaultView.Sort = "["+actionLogDT.Columns[0].ColumnName+"] asc";
データテーブルを戻す必要がある場合は、次のようなことができます。
var dv = actionLogDT.DefaultView;
dv.Sort = "StartDate";
actionLogDT = dv.ToTable();
気になるところ:なぜDataRowViewを使用しているのですか?
つまり.
foreach (DataRow row in actionLogDT.Rows)
{
Console.WriteLine(row["Status"]);
}