Вопрос

Я запутался в 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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top