![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 15.08.2008
Сообщений: 12
|
![]()
Как бы попроще и покрасивее решить вот такую проблемку:
Есть cxGrid (DevExpress) в режиме TableView (просто таблица, не БД). Когда я выделяю в гриде например 10 строк и удаляю их, нажав Delete, то событие OnAfterDelete (у cxGridTableView) возникает 10 раз, а мне надо отработать событие только после удаления всех 10 строк. Обработка события можеть занимать длительное время, поэтому не хочется процесс повторять 10 раз. Можно ли как-то настроить cxGrid так, чтобы событие OnAfterDelete возникало 1 раз? Ну или в обработчике события как-то проигнорировать первые 9 вызовов и отработать только последний. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Можете перед Delete программно определить к-во выделенных строк? Если да, то запомните в переменную, которая будет доступна и в OnAfterDelete. В OnAfterDelete вначале вычитайте из неё 1. Если не 0 - сразу выход, в противном случае - отрабатывайте событие.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 15.08.2008
Сообщений: 12
|
![]()
Кол-во выделенных строк конечно можно узнать, но как это узнать непосредственно перед Delete? Его нельзя узнавать в самом событии OnAfterDelete, можно было бы кол-во строк определять ранее в OnBeforeDelete, но это событие тоже возникает 10 раз, к сожалению.
Есть еще событие OnSelectionChanged, в котором в принципе можно и запоминать в переменную кол-во выделенных строк, но это событие будет возникать даже при простом переходе на другую ячейку, не говоря уж о выделениии группы ячеек. Ну видимо придется так и делать. |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Заведите переменную b: Boolean. Начальное значение True. В OnBeforeDelete если b=False - ничего не делать, иначе подсчитайте к-во выделенных строк и b:=False. В OnAfterDelete когда ваша переменная сбросится в 0 отрабатывайте событие и b:=True. Если не напутал, то должно сработать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 15.08.2008
Сообщений: 12
|
![]()
да, все кажется логичным, должно сработать. Спасибо!
|
![]() |
![]() |
![]() |
#6 |
Новичок
Джуниор
Регистрация: 28.04.2011
Сообщений: 1
|
![]()
можно в настройках грида запретить удаление. делать это вручную, например по нажатию del, а в обработчике вызывать ADataController.DeleteSelection или DeleteFocused
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как правильно обработать событие в cxGrid, в ячейке с CheckBox ? | $T@LKER | Компоненты Delphi | 0 | 26.08.2010 23:46 |
Многократное наследование | bashkan-nik | Помощь студентам | 1 | 20.01.2010 17:36 |
Многократное наследование с++ | bashkan-nik | Помощь студентам | 1 | 16.01.2010 19:00 |
ActiveForm: возникновение DAX Error | Gear99 | Общие вопросы Delphi | 0 | 08.10.2009 14:22 |
Возникновение и первая редакция ОС UNIX | Hallo | Обсуждение статей | 0 | 12.12.2006 21:31 |