Каков наилучший способ сортировки поля со списком данных? - PullRequest
5 голосов
/ 27 августа 2008

Я провел небольшое исследование в этой области, и кажется, что единственный способ сортировки комбинированного окна с привязкой данных - это сортировка самого источника данных (в данном случае DataTable в DataSet).

Если это так, то возникает вопрос: как лучше всего отсортировать таблицу данных?

Привязки поля со списком устанавливаются в дизайнере при инициализации с помощью

<code>myCombo.DataSource = this.typedDataSet;
myCombo.DataMember = "Table1";
myCombo.DisplayMember = "ColumnB";
myCombo.ValueMember = "ColumnA";

Я попытался установить

<code>this.typedDataSet.Table1.DefaultView.Sort = "ColumnB DESC";
Но это не имеет значения, я попытался установить это в конструкторе элемента управления, до и после вызова typedDataSet.Merge.

Ответы [ 7 ]

7 голосов
/ 27 августа 2008

Если вы используете DataTable, вы можете использовать свойство (DataTable.DefaultView) DataView.Sort . Для большей гибкости вы можете использовать компонент BindingSource . BindingSource будет источником данных вашего комбинированного списка. Затем вы можете изменить свой источник данных с DataTable на List без изменения источника данных в выпадающем списке.

Служит компонент BindingSource много целей. Во-первых, это упрощает связывание элементов управления в форме с данными управление валютой, обмен уведомление и другие услуги между элементами управления Windows Forms и источники данных.

2 голосов
/ 27 августа 2008

Вы действительно можете отсортировать представление по умолчанию в DataTable:

myDataTable.DefaultView.Sort = "Field1, Field2 DESC";

Это отсортирует все строки, которые вы извлекаете непосредственно из DataTable.

1 голос
/ 13 августа 2009

У Джоша Смита есть сообщение в блоге , которое отвечает на этот вопрос и делает все это на XAML.

1 голос
/ 27 августа 2008

Убедитесь, что привязали DefaultView к источнику данных Controls после установки свойства Sort, а не таблицы:

myCombo.DataSource = this.typedDataSet.Tables["Table1"].DefaultView;
myCombo.DisplayMember = "ColumnB";
myCombo.ValueMember = "ColumnA";
0 голосов
/ 29 марта 2009

Я понимаю, что вы уже выбрали свой ответ на этот вопрос, но я бы предложил разместить DataView в вашей форме, привязать его к DataSet / DataTable и настроить сортировку в представлении в конструкторе. Затем вы привязываете свой комбинированный список к DataView, а не к DataSet / DataTable.

0 голосов
/ 27 августа 2008

Самый простой способ сортировки ComboBox - использовать свойство ComboBox.Sorted . Однако это не сработает, если вы используете привязку данных. В этом случае вам придется отсортировать сам источник данных.

Можно использовать SortedList или SortedDictionary (оба отсортированы по ключу) или DataView .

DataView имеет свойство Sort , которое принимает выражение сортировки (строку), например:

view.Sort = "State, ZipCode DESC";

В приведенном выше примере и State, и ZipCode являются столбцами в DataTable, используемом для создания DataView.

0 голосов
/ 27 августа 2008

Должны ли данные быть в DataTable? Использовать SortedList и связать его со списком было бы проще.

Если вам нужно использовать DataTable, вы можете использовать метод Select для извлечения DataView и передачи параметра сортировки.

DataView dv = myDataTable.Select("filter expression", "sort");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...