DataTable.DefaultView.Sort не сортирует
Я запутался в DataTable.DefaultView.Sort. Вот фрагмент кода, в котором я хочу его использовать.
actionLogDT.DefaultView.Sort = "StartDate";
foreach (CustomerService.ActionLogStartEndRow logRow in actionLogDT)
{
// code here
}
Образцы, которые я видел, не используют цикл foreach, и поэтому меня путают в том, как обрабатывать это. Это не сортировка, поскольку я думал, что это должно быть.
Я вижу, что .DefaultView возвращает представление, а .Table дает ошибку компиляции.
Ответы
Ответ 1
Мне пришлось придерживаться немного другого подхода. Этот пост был самым близким, который я мог найти, чтобы заставить мой код работать. Вот результат работы:
actionLogDT.DefaultView.Sort = "StartDate";
DataView dv = actionLogDT.DefaultView;
foreach (DataRowView logRow in dv) { . . . }
Оттуда мне просто нужно вернуть значение в соответствующий тип.
(string)logRow["Status"].ToString()
Ответ 2
actionLogDT.DefaultView.Sort = "StartDate";
actionLogDT = actionLogDT.DefaultView.ToTable();
Ответ 3
Сортировка представления не изменит порядок сортировки данных в таблице, просто порядок в представлении. Он должен работать, если вы вместо этого сделаете свой foreach
на представлении, отбросив строку из DataRowView до строго типизированной строки.
foreach (DataRowView logRowView in actionLogDT.DefaultView)
{
CustomerService.ActionLogStartEndRow logRow = logRowView.Row as CustomerService.ActionLogStartEndRow;
// code here
}
Ответ 4
foreach (var logRow in actionLogDT.DefaultView.ToDataTable()) { ... }
Ответ 5
Кроме того, поскольку казалось, что вы хотите перебирать записи, вы можете просто пропустить объекты 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();
}
Ответ 6
Пожалуйста, попробуйте следующее:
actionLogDT.DefaultView.Sort = "["+actionLogDT.Columns[0].ColumnName+"] asc";
Ответ 7
Просто любопытно: Почему вы используете DataRowView?
то есть.
foreach (DataRow row in actionLogDT.Rows)
{
Console.WriteLine(row["Status"]);
}
Ответ 8
Если вам нужна дата, то вы можете сделать что-то вроде:
var dv = actionLogDT.DefaultView;
dv.Sort = "StartDate";
actionLogDT = dv.ToTable();