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

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

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

Я так понимаю, что поставленную мною цель достичь невозможно, так как моя сортировка относится к пользовательской, но и в то же время есть связь с источником данных?
Как тогда быть?
...
Рейтинг: 0 / 0
09.07.2014, 21:10
    #38692387
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка DataGridView
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
09.07.2014, 22:44
    #38692449
Volik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка DataGridView
Cat2,
Только сортировать надо не DataGridView, а его BindingSource
Типа
BindungSource.Sort=”Field0 Asc, Field1 Desc”

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

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

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

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

А если Вы про сортировку DataGridView, то у меня инициализирован DataSource, что, КАК Я ПОНЯЛ, делает невозможным сортировку с использованием класса-компаратора в данном случае.
...
Рейтинг: 0 / 0
10.07.2014, 12:06
    #38692939
IApple
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка DataGridView
Volik, если нужен метод, то это ApplySort, но класса-компаратора там нет, а перекрыть его самостоятельно трудновато будет.
Но ведь и BindingSource не содержит коллекции строк для отображения, а только показывает то, на что смотрит DataSource+DataMember...
Это либо коллекция, либо DataTable. Сортируйте этот источник данных самостоятельно своим компаратором или, возможно еще на этапе загрузки данных из БД, исполюзуя ХП в ORDER BY, а BindingSource.Sort оставте в покое.
...
Рейтинг: 0 / 0
11.07.2014, 08:41
    #38693972
Volik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка DataGridView
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
11.07.2014, 10:40
    #38694075
Volik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка DataGridView
Решил проблему переналожением старого фильтра после перепривязки.
...
Рейтинг: 0 / 0
11.07.2014, 18:26
    #38694707
HomeCoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка DataGridView
авторtable = table.AsEnumerable().OrderBy(x => x, _columnSorter).CopyToDataTable();
А нельзя наложить фильтр в вашей цепочке IEnumerable/IQueryable? Уж эти-то интерфейсы принимают в своих методах компараторы в виде делегатов или лямбд.
...
Рейтинг: 0 / 0
11.07.2014, 18:27
    #38694708
HomeCoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка DataGridView
Я имею ввиду расширения LINQ.
...
Рейтинг: 0 / 0
11.07.2014, 22:20
    #38694794
IApple
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка DataGridView
Volik, фильтровать лучче до сортировки...
...
Рейтинг: 0 / 0
13.07.2014, 22:43
    #38695530
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка DataGridView
VolikДолжно получиться:
1
5
5a
40
Это типа нумерация домов?
...
Рейтинг: 0 / 0
13.07.2014, 22:48
    #38695534
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка DataGridView
Для номеров домов лучше хранить его в двух колонках: номер и литера.
Если уж никак невозможно преобразовать таблицу, то можно внести эти поля в DataTable и сразу после заполнения пробежаться по таблице и заполнить эти колонки.
Эти колонки показывать в гриде не надо.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сортировка DataGridView / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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