it-swarm.com.ru

DataTable.DefaultView.Sort не сортирует

Я запутался в DataTable.DefaultView.Sort. Вот фрагмент кода, в котором я хочу его использовать.

actionLogDT.DefaultView.Sort = "StartDate";

foreach (CustomerService.ActionLogStartEndRow logRow in actionLogDT)
{
  // code here
}

Образцы, которые я видел, не используют цикл foreach и поэтому меня сбивают с толку способы их обработки. Это не сортировка, как я и думал.

Я вижу, что .DefaultView возвращает представление, а .Table выдает ошибку компиляции.

15
Mike Wills

Мне пришлось принять немного другой подход. Этот пост был самым близким, который я смог найти, чтобы заставить мой код работать. Вот рабочий результат:

actionLogDT.DefaultView.Sort = "StartDate";
DataView dv = actionLogDT.DefaultView;

foreach (DataRowView logRow in dv) { . . . }

Оттуда я просто должен преобразовать значение обратно в его правильный тип.

(string)logRow["Status"].ToString()
7
Mike Wills
actionLogDT.DefaultView.Sort = "StartDate";

actionLogDT = actionLogDT.DefaultView.ToTable();
26
ashdiggedy

Сортировка представления не изменит порядок сортировки данных в таблице, только порядок в представлении. Это должно сработать, если вместо этого вы сделаете foreach в представлении, приведя строку из DataRowView обратно к вашей строго типизированной строке.

foreach (DataRowView logRowView in actionLogDT.DefaultView)
{
    CustomerService.ActionLogStartEndRow logRow = logRowView.Row as CustomerService.ActionLogStartEndRow;
    // code here
}
10
Jeromy Irvine

Кроме того, поскольку казалось, что вы хотите проходить по записям, вы можете просто пройтись по объектам 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();
}
3
Kevin Cain
foreach (var logRow in actionLogDT.DefaultView.ToDataTable()) { ... }
3
John Sheehan

Пожалуйста, попробуйте это:

actionLogDT.DefaultView.Sort = "["+actionLogDT.Columns[0].ColumnName+"] asc";
1
Upender

Если вам нужна база данных, тогда вы можете сделать что-то вроде:

var dv = actionLogDT.DefaultView;
dv.Sort = "StartDate";

actionLogDT = dv.ToTable();
0
Adi Bilauca

Просто любопытно: почему вы используете DataRowView

то есть.

foreach (DataRow row in actionLogDT.Rows)
{
  Console.WriteLine(row["Status"]);
}
0
jp2code