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