|
Сортировка DataGridView
|
|||
---|---|---|---|
#18+
Добрый день. Возникли проблемы с пониманием сортировки DataGridView. Вычитал с msdn следующие вещи: 1) Программная сортировка "Если элемент управления DataGridView связан с внешним источником данных путем задания свойства DataSource, перегрузка метода Sort(DataGridViewColumn,ListSortDir ection) не работает для несвязанных столбцов. Кроме того, если свойство VirtualMode имеет значение true, вызов этой перегрузки возможен только для связанных столбцов. Определить, является ли столбец связанным, можно исходя из значения свойства IsDataBound. Сортировка несвязанных столбцов в связанном режиме не поддерживается." 2) Пользовательская сортировка "Перегрузка метода Sort(IComparer) работает, только если элемент управления DataGridView не связан с внешним источником данных, а свойство VirtualMode имеет значение false. Для настройки сортировки для столбцов, связанных с внешним источником данных, следует воспользоваться операциями сортировки, которые поддерживаются этим источником данных. В виртуальном режиме операции сортировки для несвязанных столбцов необходимо обеспечить самостоятельно." Что имеется: DataGridView, для которой настроен источник данных. Что нужно: Отсортировать один из столбцов в нужном мне порядке (в ячейках смешанный тип данных, например "строка + число"). Я так понимаю, что поставленную мною цель достичь невозможно, так как моя сортировка относится к пользовательской, но и в то же время есть связь с источником данных? Как тогда быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 17:30 |
|
Сортировка DataGridView
|
|||
---|---|---|---|
#18+
Volik, Ну почему. Можно все. Только сортировать надо не DataGridView, а его BindingSource Типа BindungSource.Sort=”Field0 Asc, Field1 Desc” Устанавливаем режим програмастик Как нарисовать глифы и реагировать на клик по заголовку - творчески переработать пример функции sortButton_Click из http://msdn.microsoft.com/ru-ru/library/vstudio/ms171608(v=vs.100).aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 21:10 |
|
Сортировка DataGridView
|
|||
---|---|---|---|
#18+
Cat2, Только сортировать надо не DataGridView, а его BindingSource Типа BindungSource.Sort=”Field0 Asc, Field1 Desc” Таким способом можно правильно отсортировать столбец, если в нем следующие значения? 1 40 5a 5 Должно получиться: 1 5 5a 40 Но получится: 1 40 5 5а ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 22:44 |
|
Сортировка DataGridView
|
|||
---|---|---|---|
#18+
Как свою особую сортировку прикрутить таким способом? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2014, 22:46 |
|
Сортировка DataGridView
|
|||
---|---|---|---|
#18+
VolikКак свою особую сортировку прикрутить таким способом? Разве метод сортировки не принимает какой-нибудь компаратор? А там уже думай, как сортировать числа и буквы. Может, стоит разделить название на числовую и буквенную части и сортировать сначала по числам, а потом по буквам. Название, естественно, выводить без разделения. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2014, 08:05 |
|
Сортировка DataGridView
|
|||
---|---|---|---|
#18+
HomeCoder, BindungSource.Sort - это не метод. Я не знаю, компаратор какого вида он может принимать. А если Вы про сортировку DataGridView, то у меня инициализирован DataSource, что, КАК Я ПОНЯЛ, делает невозможным сортировку с использованием класса-компаратора в данном случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2014, 08:17 |
|
Сортировка DataGridView
|
|||
---|---|---|---|
#18+
Volik, если нужен метод, то это ApplySort, но класса-компаратора там нет, а перекрыть его самостоятельно трудновато будет. Но ведь и BindingSource не содержит коллекции строк для отображения, а только показывает то, на что смотрит DataSource+DataMember... Это либо коллекция, либо DataTable. Сортируйте этот источник данных самостоятельно своим компаратором или, возможно еще на этапе загрузки данных из БД, исполюзуя ХП в ORDER BY, а BindingSource.Sort оставте в покое. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2014, 12:06 |
|
Сортировка DataGridView
|
|||
---|---|---|---|
#18+
IApple, попробовал сделать вот так Код: c# 1. 2. 3. 4.
где _columnSorter - мой класс компаратора. Сортирует как надо, но к моему гриду прикручен комбобокс с выпадающими фильтрами. И после сортировки вся фильтрация слетает из-за перепривязки отсортированного источника (без перепривязки не сортируется). Можно ли как-то избежать данной перепривязки? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2014, 08:41 |
|
Сортировка DataGridView
|
|||
---|---|---|---|
#18+
Решил проблему переналожением старого фильтра после перепривязки. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2014, 10:40 |
|
Сортировка DataGridView
|
|||
---|---|---|---|
#18+
авторtable = table.AsEnumerable().OrderBy(x => x, _columnSorter).CopyToDataTable(); А нельзя наложить фильтр в вашей цепочке IEnumerable/IQueryable? Уж эти-то интерфейсы принимают в своих методах компараторы в виде делегатов или лямбд. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2014, 18:26 |
|
Сортировка DataGridView
|
|||
---|---|---|---|
#18+
Я имею ввиду расширения LINQ. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2014, 18:27 |
|
Сортировка DataGridView
|
|||
---|---|---|---|
#18+
Volik, фильтровать лучче до сортировки... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2014, 22:20 |
|
Сортировка DataGridView
|
|||
---|---|---|---|
#18+
VolikДолжно получиться: 1 5 5a 40 Это типа нумерация домов? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2014, 22:43 |
|
Сортировка DataGridView
|
|||
---|---|---|---|
#18+
Для номеров домов лучше хранить его в двух колонках: номер и литера. Если уж никак невозможно преобразовать таблицу, то можно внести эти поля в DataTable и сразу после заполнения пробежаться по таблице и заполнить эти колонки. Эти колонки показывать в гриде не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2014, 22:48 |
|
|
start [/forum/topic.php?fid=20&msg=38693972&tid=1402709]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 334ms |
total: | 499ms |
0 / 0 |