|
|
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток, уважаемые. Ситуация такая. Есть cxGrid с TcxGridDBBandedTableView, у которого GridMode := True; Описываю вручную события DataController.OnSortingChanged и DataController.Filter.OnBeforeChange, тут проблем нет, они работают корректно. Кроме этих событий, есть еще реализация события OnFocusedRecordChanged (тут я в зависимости от данных управляю доступностью кнопок на форме). Так вот сама проблема. При выборе сортировки (если кликнули по колонке), после выполнения всех плановых процедур почему-то еще раз вызывается событие OnFocusedRecordChanged и почему-то передается (AFocusedRecord = nil), хотя строка выделена по итогу. Ну и как результат, все кнопки задизейблены, хотя такого не должно быть (переход на любую запись и возврат опять на первую это подтверждает). Отловить где вызывается еще раз OnFocusedRecordChanged не получилось, но это случается всегда после того как отработало полностью событие DataController.OnSortingChanged. Кто с таким сталкивался, просветите, почему такая ситуация складывается? Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2018, 16:25 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
Потому что события focused и selected будут срабатывать дважды -- при открытии и повторном открытии датасета. Для того, чтобы было все нормально и срабатывало одно -- надо вызывать у грида BeginUpdate/EndUpdate. И вот после EndUpdate и сработают все события (если они были). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2018, 20:04 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
JaDiПотому что события focused и selected будут срабатывать дважды -- при открытии и повторном открытии датасета. Для того, чтобы было все нормально и срабатывало одно -- надо вызывать у грида BeginUpdate/EndUpdate. И вот после EndUpdate и сработают все события (если они были). Это и так понятно. Вопрос не в этом, срабатывает дополнительно еще один раз, после отработки события OnSortingChanged. Или я что-то не так понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2018, 09:16 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
Обычно на кнопки вешают Action-ы и дизаблят в OnUpdate. Вы дизаблете в зависимости от данных, грид то тут причём ? Полагаться на OnFocusedRecordChanged не стоит. Завтра поменяете Грид на другой, а в нём нет такого события (гипотетически) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2018, 09:25 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
Кстати, focused не всегда срабатывает (т.е. фокус может поменяться, но события не будет -- уже не помню, в каких именно ситуациях). Поэтому везде selected использую, он точно всегда работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2018, 09:40 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
JaDiКстати, focused не всегда срабатывает (т.е. фокус может поменяться, но события не будет -- уже не помню, в каких именно ситуациях). Поэтому везде selected использую, он точно всегда работает. На selected в бэндовых гридах при переходе постранично пропадает отрисовка, потому и перешел на focused, с ним у меня проблем не было ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2018, 11:52 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
DimaBrОбычно на кнопки вешают Action-ы и дизаблят в OnUpdate. Вы дизаблете в зависимости от данных, грид то тут причём ? Полагаться на OnFocusedRecordChanged не стоит. Завтра поменяете Грид на другой, а в нём нет такого события (гипотетически) А кто говорит про грид? Я работаю с DBBandedTableView, событие это есть и переходить на другой не собираюсь. Если чисто гипотетически надо будет перейти на другой грид, то это будет уже совершенно другая проблема и реализация, ежу понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2018, 12:53 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийА кто говорит про грид? Я работаю с DBBandedTableView, событие это есть и переходить на другой не собираюсь. Если чисто гипотетически надо будет перейти на другой грид, то это будет уже совершенно другая проблема и реализация, ежу понятно. У вас DBBandedTableView - то есть вы работаете с данными в Dataset, а грид - интрумент для отображения данных. Зачем брать данные с промежуточного элемента ? Работайте напрямую с Dataset ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2018, 15:57 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
DimaBrУ вас DBBandedTableView - то есть вы работаете с данными в Dataset, а грид - интрумент для отображения данных. Зачем брать данные с промежуточного элемента ? Работайте напрямую с Dataset Так отрисовка же делается на конечном контейнере, то есть на DBBandedTableView, причем тут Dataset? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2018, 11:40 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
Причём здесь отрисовка грида и задизабленные кнопки ? Вы кнопки гасите в зависимости от того где курсор датасета ? Чтобы, например, не давать редактировать какую-то запись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2018, 12:24 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
DimaBrПричём здесь отрисовка грида и задизабленные кнопки ? Вы кнопки гасите в зависимости от того где курсор датасета ? Чтобы, например, не давать редактировать какую-то запись. Да дело даже не в том, на каком событии вешается доступность кнопок. Я хочу понять почему срабатывает событие OnFocusedRecordChanged без фокуса после выполнения события DataController.OnSortingChange. Где-то есть очередность срабатываний событий у TableView? Вот в чем вопрос был, а не то, что мы обсуждаем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 11:12 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
DimaBrПричём здесь отрисовка грида и задизабленные кнопки ? Вы кнопки гасите в зависимости от того где курсор датасета ? Чтобы, например, не давать редактировать какую-то запись. Да дело даже не в том, на каком событии вешается доступность кнопок. Я хочу понять почему срабатывает событие OnFocusedRecordChanged без фокуса после выполнения события DataController.OnSortingChange. Где-то есть очередность срабатываний событий у TableView? Вот в чем вопрос был, а не то, что мы обсуждаем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 11:18 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
Леонов Юрий, Обращаю внимание на: авторПри выборе сортировки (если кликнули по колонке), после выполнения всех плановых процедур почему-то еще раз вызывается событие OnFocusedRecordChanged и почему-то передается Вот эти "плановые процедуры" и стоит смотреть, что именно в них делается. А то может датасет там переоткрывается. Тогда срабатывание фокуса логично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 11:49 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
у них там порой бывает необоснованная лишняя а то и двойная работа в некоторых местах, см. например Q515220, Q515958, Q506338, в какой-то мере Q516328 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2018, 12:02 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
JaDiЛеонов Юрий, Обращаю внимание на: авторПри выборе сортировки (если кликнули по колонке), после выполнения всех плановых процедур почему-то еще раз вызывается событие OnFocusedRecordChanged и почему-то передается Вот эти "плановые процедуры" и стоит смотреть, что именно в них делается. А то может датасет там переоткрывается. Тогда срабатывание фокуса логично. Прошелся по всем процедурам, все нормально отработало, но после выхода из процедуры OnSortingChanged срабатывает еще раз OnFocusedRecordChanged, у которого AFocusedRecord=nil. Это что, нажатие на Header столбца запускает событие изменения сортировки, а потом срабатывает отжатие клавиши мыши и типа теряется фокус? Кто-то может четко прояснить почему так происходит или хотя бы ткните в доку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2018, 16:42 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
Леонов Юрий, предлагаю сделать тестовый пример (грид, виртуальный датасет с тестовыми данными и парочка событий) и приложить сюда. Заодно подтвердить, что виновато именно OnSorting, а не что-то другое. Потому что гадать на кофейной гуще становится тяжело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2018, 17:16 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
авторПрошелся по всем процедурам, все нормально отработало Повторяю -- причина "в другом коде". Обращаю внимание на работу событий: Код: pascal 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. FocusedRecordChanged -- срабатывает каждый раз, когда меняется Grid Mode. Более того, в грид моде FocusedRecordChanged вообще не срабатывает. Т.е. смотреть надо именно "другой код". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2018, 18:31 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
JaDi, сделал я тестовый пример, получилось вот такое: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2018, 17:46 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
в красной рамке - выполнение события DataController.OnSortingChanged Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2018, 17:51 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
Меня интересует, откуда вызывается OnFocusedRecordChanged после выполнения сортировки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2018, 17:53 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
Леонов Юрийуправляю доступностью кнопок на форме)s / GridView.OnFocusedRecordChanged / GridView.DataController.DataSource.DataSet.OnAfterScroll / - не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2018, 18:47 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
Леонов Юрий, "лишнее" срабатывание OnFocusedRecordChanged идет из-за переоткрытия датасета -- в нем меняется фокус и соответственно девгрид на это реагирует тоже для синхронизации текущего грида с датасетом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2018, 19:49 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
Хмм... Событие OnFocusedRecordChanged вызывается вообще при ЛЮБЫХ изменениях в датасете, даже если по факту ничего не менялось. Например, достаточно тупо вызвать MemData.Edit; MemData.Post, чтобы сработало событие. И это нормальное поведение по словам техподдержки . авторI am afraid this issue cannot be fixed, because when the Post method is called, DataSet generates a notification of the DataLink.DataSetChanged method. In the DataLink.DataSetChanged method, we cannot determine what has happened (whether data or a list of records has been changed, or simple data has been posted). When our component processes the DataLink.DataSetChanged notification, it needs to refresh all records loaded from the dataset. In this case, we cannot determine whether or not the focused record has been changed and need to raise the FocusedRecordChanged event. Короче, надо смириться и просто обрабатывать эти ситуации -- например, ввести переменную IsFreezeFocusRecordEvent, включать ее в начале обновления и отключать после всех обновлений, а в самом событии уже ее проверять и всё игнорить в нужных случаях (более правильный аналог выключения обработчика через OnFocusedRecordChanged = nil). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2018, 20:22 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
Даже dataset.DisableControls; dataset.EnableControls; приведет к срабатыванию события. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2018, 20:26 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
JaDiДаже dataset.DisableControls; dataset.EnableControls; приведет к срабатыванию события.Тем более! И именно по вышеописанной причине. Основная причина - обеспечение консистента для грида и данных. Юзер может что угодно сделать при DisableControls или переоткрытии данных. Может висеть логика на эвентах датасета, может стать невалидными букмарки и т.д. Поэтому надо гарантировано отрефрешить все внутренности датаконтроллера и грида. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2018, 22:16 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
Одного не могу понять, зачем делать искусственную сортировку в гриде путём переоткрытия запроса ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2018, 23:02 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
ma1tusЛеонов Юрийуправляю доступностью кнопок на форме)s / GridView.OnFocusedRecordChanged / GridView.DataController.DataSource.DataSet.OnAfterScroll / - не? Как бы да, но были моменты, из-за которых отказались. Сейчас не вспомню уже, что конкретно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2018, 08:58 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
JaDiЛеонов Юрий, "лишнее" срабатывание OnFocusedRecordChanged идет из-за переоткрытия датасета -- в нем меняется фокус и соответственно девгрид на это реагирует тоже для синхронизации текущего грида с датасетом. Я не случайно выделил красным блок лога. Все, что делается между записями в лог - делается целенаправленно. Меня больше интересует почему после отработки этого блока вызывается еще раз OnFocusedRecordChanged (последняя запись в логе) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2018, 09:01 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
DimaBrОдного не могу понять, зачем делать искусственную сортировку в гриде путём переоткрытия запроса ? При включенном GridMode TableView не делает сам сортировку, фильтрацию и еще кучу полезных дел. Потому я пересобираю руками запрос и заново открываю его ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2018, 09:02 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
JaDiДаже dataset.DisableControls; dataset.EnableControls; приведет к срабатыванию события. Dataset.Close очищает данные в TableView, например. Это тоже приводит к изменению фокуса. Был, скажем, AFocusedRecord.Index=1, а станет AFocusedRecord=nil. Вариантов много... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2018, 09:06 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
столько копий сломано, две темы в несколько страниц. ТС, ваш запрос несколько не по адресу. Если вы хотите понять, зачем, то нужно обращаться в тех. поддержку DevExpress. Если вы хотите игнорировать вызов OnFocusedRecordChanged при AFocusedRecord=nil, то может проще написать: Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2018, 09:41 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
Леонов ЮрийПри включенном GridMode TableView не делает сам сортировку, фильтрацию и еще кучу полезных дел. Потому я пересобираю руками запрос и заново открываю его То есть вы вручную грузите НЕКОТОРОЕ количество записей и сортируете их ? А что же в FText ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2018, 10:15 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
DimaBrЛеонов ЮрийПри включенном GridMode TableView не делает сам сортировку, фильтрацию и еще кучу полезных дел. Потому я пересобираю руками запрос и заново открываю его То есть вы вручную грузите НЕКОТОРОЕ количество записей и сортируете их ? А что же в FText ? В FText при старте я записал текст исходного запроса (типа select * from view where FKey = 66), чтобы потом можно было уже к этому шаблону добавлять необходимые условия сортировок и фильтраций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2018, 10:25 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
Если select * from , то какой толк от GridMode ? Я включил GridMode чтобы грузить ЧАСТЬ записей, но сам гружу все, чтобы потом можно было сортировать. Это напоминает надевание штанов через голову ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2018, 10:55 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
DimaBrЕсли select * from , то какой толк от GridMode ?"select *" отнюдь не значит что будет сразу же зафетчен весь набор, как обычно зависит от датасета и порой режима его работы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2018, 17:30 |
|
||
|
Сортировка и GridMode
|
|||
|---|---|---|---|
|
#18+
DimaBrЕсли select * from , то какой толк от GridMode ? Я включил GridMode чтобы грузить ЧАСТЬ записей, но сам гружу все, чтобы потом можно было сортировать. Это напоминает надевание штанов через голову Я выбираю все из вьюхи по условиям (есть статические условия и заданные пользователем фильтры). Датасет читает все данные, но отдает их по частям по мере надобности пользователя, чтобы долго не грузило в грид. Если пользователь хочет отсортировать данные, то он же будет сортировать не из видимой части TableView, а по всему набору... Промежуточное решение найдено. Если AFocusedRecord = nil и APrevFocusedRecord = nil, то прерываю обработку. Пока работает, посмотрю, что будет дальше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2018, 17:31 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2040126]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
173ms |
get topic data: |
12ms |
get forum data: |
4ms |
get page messages: |
79ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 537ms |

| 0 / 0 |
