|
Сортировка по нескольким столбцам datagridview
|
|||
---|---|---|---|
#18+
Здравствуйте! У меня есть заполненный "заказными" данными компонент datagridview. Мне хотелось бы получить пошаговую сортировку, например, сначала я сортирую по значениям одного столбца. Потом, с учетом рез-тов первой сортировки, мне нужно упорядочить записи по другому столбцу, потом с учетом предыдущих двух сортировок по третьему и т.д. т.е. я кликаю правой кнопкой на столбце, выбираю в контекстном меню "по возрастанию"/"по убыванию" (осуществляется программная сортировка). В headerе этого столбца, например, появляется цифра 1 - т.е. сортировка происходит первым на первом по значениям этого столбца. Потом кликаю на другом столбце, и с учетом сортировки по первому столбцу, сортируется по значениям второго выбранного столбца, например по убыванию. и в хэдэре этого столбца появляется цифра 2, ну и значок там треугольничек вниз, указывающий направление сортировки. Подскажите пожалуйста как реализовать это. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2011, 22:44 |
|
Сортировка по нескольким столбцам datagridview
|
|||
---|---|---|---|
#18+
Я видел такую штуку под 3,5-й фрэйм кажется, видел что такое можно сделать :) под второй фрэймворк, при заполнении данных по Fill'у из SqlDataAdapter'a я вообще убирал возможность сортировки для всех столбцов DataGrida, а по двойному щелчку начислял к sql-запросу сортировку по логическим полям columns-ов... в общем то ещё веселье :) зато если делать выгрузку допустим в excel через com, снимая значения с DataGrid, то пойдёт уже с заданной сортировкой) ну и естественно нет разговора о треугольничках, индикатор сортировки нужно выводить отдельно, чтоб юзер не забыл часом, что он там насортировал :) ну и кнопку сброса сортировки опятьже. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 01:17 |
|
Сортировка по нескольким столбцам datagridview
|
|||
---|---|---|---|
#18+
1. Отключить автоматическую сортировку столбцов. 2. Делать сортировку связанного с гридом BindingSource 3. Треугольнички отрисовывать самостоятельно Примерно так: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2011, 07:55 |
|
Сортировка по нескольким столбцам datagridview
|
|||
---|---|---|---|
#18+
Ну и тут наверное очевидное дополнение: bindingsource.Sort="Column3 ASC, Column1 DESC, Column5 DESC" ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2011, 08:44 |
|
Сортировка по нескольким столбцам datagridview
|
|||
---|---|---|---|
#18+
Cat2, подскажите а как обращаться к элементам BindingSource? Как вы предлагаете производить сортировку на каждом последующем шаге с учетом предыдущих сортировок? Как вы считаете, может быть мне просто лучше сортировку осуществлять по средством SQL запроса, запоминаю порядок order by? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2011, 19:18 |
|
Сортировка по нескольким столбцам datagridview
|
|||
---|---|---|---|
#18+
Kaj09, прошу прощения что я не Cat2 (хотя очень бы хотелось ^_^ ) в частном порядке я так и делал, массив сортирующих строк пихал в List<string> LB_sort (правда это ListBox но не важно :) ) а при построении, собирал с этого списка в строковую переменную order, ну и order потом подставлял в команду запроса, единственное конечно desc (обратную сортировку) я не предусматривал, но это мне кажется не проблема, проверку на существование в списке повесить и если есть, добавлять desc собирал так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
ну это так, для приложения "на коленке" при минимальных знаниях DataGridView, коими я и обладаю. Хотя даже этими средствами можно выстроить приличный интерфейс (если постараться), правда конечно придётся каждый раз Диспозить и создавать заново DataTable подаваемый на соурс DataGridView, иначе память будет уходить на хранение перезапрошенных таблиц под новую сортировку. Но работает все равно быстро, лично тестил на массиве 12000 на 50.. в общем я утолил свою жажду общения :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2011, 07:24 |
|
Сортировка по нескольким столбцам datagridview
|
|||
---|---|---|---|
#18+
Нет необходимости отключать сортировку грида при клике на заголовок колонки. Стандартно использую грид, через биндинсорс привязанный к таблице с данными. Я использую для пересортировки отдельное окно, на котором кинут ListView с именем Fields, у него 2 колонки. Одна для названия поля данных, как это видно "внутре", вторая - как это названо в заголовке соответствующей колонки грида. Кроме того к нему прикручен ымажлист с тремя картинками: 0 - для "не сортировать", 1 - "по возрастанию", 2 - "по убыванию". Ну и собственно кнопка btGO, которая и запустит процесс сортировки. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2011, 14:05 |
|
Сортировка по нескольким столбцам datagridview
|
|||
---|---|---|---|
#18+
Kaj09Cat2, подскажите а как обращаться к элементам BindingSource? Как вы предлагаете производить сортировку на каждом последующем шаге с учетом предыдущих сортировок? Как вы считаете, может быть мне просто лучше сортировку осуществлять по средством SQL запроса, запоминаю порядок order by? А, может проще взять нормальный грид (например, XtraGrid от DevExpress), который умеет выполнять многоуровневую сортировку и не парить себе мозг. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2011, 14:14 |
|
Сортировка по нескольким столбцам datagridview
|
|||
---|---|---|---|
#18+
IAppleНет необходимости отключать сортировку грида при клике на заголовок колонки. Стандартно использую грид, через биндинсорс привязанный к таблице с данными. Я использую для пересортировки отдельное окно, на котором кинут ListView с именем Fields, у него 2 колонки. Да, действительно, нет необходимости отключать сортировку. Это у Вас правильное решение. Однако можно и по другому, без специальной формы. Отлавливать ColumnHeaderMouseClick и если при этом нажата клавиша Ctrl (например) заносить имя поля столбца в значение BindingSource.Sort. Тут повозится придется с реализацией, но как идея - работоспособно ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2011, 13:49 |
|
|
start [/forum/topic.php?fid=20&fpage=159&tid=1404495]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
78ms |
get tp. blocked users: |
2ms |
others: | 330ms |
total: | 505ms |
0 / 0 |