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();