powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сортировка DataGridView
14 сообщений из 14, страница 1 из 1
Сортировка DataGridView
    #38692224
Volik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Возникли проблемы с пониманием сортировки DataGridView.
Вычитал с msdn следующие вещи:
1) Программная сортировка
"Если элемент управления DataGridView связан с внешним источником данных путем задания свойства DataSource, перегрузка метода Sort(DataGridViewColumn,ListSortDir ection) не работает для несвязанных столбцов. Кроме того, если свойство VirtualMode имеет значение true, вызов этой перегрузки возможен только для связанных столбцов. Определить, является ли столбец связанным, можно исходя из значения свойства IsDataBound. Сортировка несвязанных столбцов в связанном режиме не поддерживается."

2) Пользовательская сортировка
"Перегрузка метода Sort(IComparer) работает, только если элемент управления DataGridView не связан с внешним источником данных, а свойство VirtualMode имеет значение false. Для настройки сортировки для столбцов, связанных с внешним источником данных, следует воспользоваться операциями сортировки, которые поддерживаются этим источником данных. В виртуальном режиме операции сортировки для несвязанных столбцов необходимо обеспечить самостоятельно."

Что имеется: DataGridView, для которой настроен источник данных.
Что нужно: Отсортировать один из столбцов в нужном мне порядке (в ячейках смешанный тип данных, например "строка + число").

Я так понимаю, что поставленную мною цель достичь невозможно, так как моя сортировка относится к пользовательской, но и в то же время есть связь с источником данных?
Как тогда быть?
...
Рейтинг: 0 / 0
Сортировка DataGridView
    #38692387
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Volik,

Ну почему. Можно все.
Только сортировать надо не DataGridView, а его BindingSource
Типа
BindungSource.Sort=”Field0 Asc, Field1 Desc”

Устанавливаем режим програмастик

Как нарисовать глифы и реагировать на клик по заголовку - творчески переработать пример функции sortButton_Click из

http://msdn.microsoft.com/ru-ru/library/vstudio/ms171608(v=vs.100).aspx
...
Рейтинг: 0 / 0
Сортировка DataGridView
    #38692449
Volik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cat2,
Только сортировать надо не DataGridView, а его BindingSource
Типа
BindungSource.Sort=”Field0 Asc, Field1 Desc”

Таким способом можно правильно отсортировать столбец, если в нем следующие значения?
1
40
5a
5

Должно получиться:
1
5
5a
40

Но получится:
1
40
5
...
Рейтинг: 0 / 0
Сортировка DataGridView
    #38692451
Volik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как свою особую сортировку прикрутить таким способом?
...
Рейтинг: 0 / 0
Сортировка DataGridView
    #38692643
HomeCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VolikКак свою особую сортировку прикрутить таким способом?
Разве метод сортировки не принимает какой-нибудь компаратор? А там уже думай, как сортировать числа и буквы. Может, стоит разделить название на числовую и буквенную части и сортировать сначала по числам, а потом по буквам. Название, естественно, выводить без разделения.
...
Рейтинг: 0 / 0
Сортировка DataGridView
    #38692648
Volik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HomeCoder,

BindungSource.Sort - это не метод. Я не знаю, компаратор какого вида он может принимать.

А если Вы про сортировку DataGridView, то у меня инициализирован DataSource, что, КАК Я ПОНЯЛ, делает невозможным сортировку с использованием класса-компаратора в данном случае.
...
Рейтинг: 0 / 0
Сортировка DataGridView
    #38692939
IApple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Volik, если нужен метод, то это ApplySort, но класса-компаратора там нет, а перекрыть его самостоятельно трудновато будет.
Но ведь и BindingSource не содержит коллекции строк для отображения, а только показывает то, на что смотрит DataSource+DataMember...
Это либо коллекция, либо DataTable. Сортируйте этот источник данных самостоятельно своим компаратором или, возможно еще на этапе загрузки данных из БД, исполюзуя ХП в ORDER BY, а BindingSource.Sort оставте в покое.
...
Рейтинг: 0 / 0
Сортировка DataGridView
    #38693972
Volik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IApple,

попробовал сделать вот так
Код: c#
1.
2.
3.
4.
table = table.AsEnumerable().OrderBy(x => x, _columnSorter).CopyToDataTable();
var bindingSource = new BindingSource();
bindingSource.DataSource = table;
this.dataGridView.DataSource = bindingSource;



где _columnSorter - мой класс компаратора.
Сортирует как надо, но к моему гриду прикручен комбобокс с выпадающими фильтрами.
И после сортировки вся фильтрация слетает из-за перепривязки отсортированного источника (без перепривязки не сортируется).

Можно ли как-то избежать данной перепривязки?
...
Рейтинг: 0 / 0
Сортировка DataGridView
    #38694075
Volik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил проблему переналожением старого фильтра после перепривязки.
...
Рейтинг: 0 / 0
Сортировка DataGridView
    #38694707
HomeCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторtable = table.AsEnumerable().OrderBy(x => x, _columnSorter).CopyToDataTable();
А нельзя наложить фильтр в вашей цепочке IEnumerable/IQueryable? Уж эти-то интерфейсы принимают в своих методах компараторы в виде делегатов или лямбд.
...
Рейтинг: 0 / 0
Сортировка DataGridView
    #38694708
HomeCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я имею ввиду расширения LINQ.
...
Рейтинг: 0 / 0
Сортировка DataGridView
    #38694794
IApple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Volik, фильтровать лучче до сортировки...
...
Рейтинг: 0 / 0
Сортировка DataGridView
    #38695530
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
VolikДолжно получиться:
1
5
5a
40
Это типа нумерация домов?
...
Рейтинг: 0 / 0
Сортировка DataGridView
    #38695534
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Для номеров домов лучше хранить его в двух колонках: номер и литера.
Если уж никак невозможно преобразовать таблицу, то можно внести эти поля в DataTable и сразу после заполнения пробежаться по таблице и заполнить эти колонки.
Эти колонки показывать в гриде не надо.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сортировка DataGridView
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]