jalmonte Ответов: 3

Любой знает, почему dt.DefaultView.Сорт не работает на меня?


У меня есть таблица данных, которая является строковым типом. Я хочу отсортировать свою таблицу по идентификатору. Я пробовал так много способов, но безуспешно. Единственный способ, который сработал, - это использовать arraylist следующим образом:

for ( int x= 0; x<dt.Rows.Count; x++)
{ int.TryParse(dt.Rows[x][0].ToString(), out obj1);
  table.Add(obj1); }
table.Sort();
(Но это только дает мне идентификатор отсортированного)

После этого я использовал:

dt.DefaultView.Sort = dt.Columns[0].ColumnName + " asc";


Но разве это дает мне
Идентификатор столбца col1 и col2 с col3 Col4
1 a b c d
2 i j k l
3 м н о п
4 q r s t
1 e f g h

Любая идея, почему дефолт.сортировка не работает должным образом :запутался:

William Winner

какой именно тип объекта представляет собой таблица? Насколько я вижу, единственное, что вы добавили в таблицу, - это один столбец, который, как я предполагаю, является идентификатором. Итак, как это даст вам что-то еще?

jalmonte

О, я сделал это, чтобы убедиться, что это можно сортировать. Но если я попытаюсь отсортировать непосредственно с помощью datatable dt.defaultview.sort, он вернет мне тот же порядок, что и был ранее. Тип объекта таблицы-string. Если я использую dataview, он возвращает такие числа, как 1, 10, 100; вместо 1, 2, 3

3 Ответов

Рейтинг:
27

Heinzzy

Ваш код не работает, потому что, когда вы пытаетесь отсортировать свою таблицу, вы на самом деле сортируете DataView. Ваш стол на самом деле не меняется.
Таким образом, Вы можете сортировать DataView и использовать его для представления данных пользователю.
Удачи вам!

DataTable dt = new DataTable();
dt.Columns.Add("ID",typeof(string));
dt.Columns.Add("Name", typeof(string));
dt.Rows.Add(new object[] { "1", "one" });
dt.Rows.Add(new object[] { "5", "five" });
dt.Rows.Add(new object[] { "2", "two" });
dt.Rows.Add(new object[] { "4", "four" });
dt.Rows.Add(new object[] { "7", "seven" });

DataView dv = dt.AsDataView();
dv.Sort = "ID ASC";

foreach (DataRow row in dv.ToTable().Rows)
{
    Console.WriteLine(row[0] + "\t" + row[1]);
}
Console.ReadKey();


jalmonte

Эй, почему, если я использую более 8k строк, процедура dv.ToTable() занимает много времени? Кроме того, если я использую вместо dt.Стол.Строки сортировка не работает...

Рейтинг:
2

Frank Edwards

// После
ДТ.DefaultView.Вроде
// Добавлять
ДТ = ДТ.DefaultView.Итого();


Richard Deeming

Как уже упоминалось в предыдущих двух решениях.

Рейтинг:
1

Syed Aqeel Abbas

tdt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
                CommonFuncs.display_grid(this.grvEmployee, tdt);

                DataTable tempdt = new DataTable();
                tempdt = tdt.DefaultView.ToTable();
                tdt.Clear();
                tdt = tempdt.DefaultView.ToTable();


Toniyo Jackson

Добавлена предварительная метка