Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2011, 20:53   #1
Andreych74
Пользователь
 
Регистрация: 15.08.2008
Сообщений: 12
По умолчанию Событие OnAfterDelete в cxGrid - многократное возникновение

Как бы попроще и покрасивее решить вот такую проблемку:
Есть cxGrid (DevExpress) в режиме TableView (просто таблица, не БД).
Когда я выделяю в гриде например 10 строк и удаляю их, нажав Delete, то событие OnAfterDelete (у cxGridTableView) возникает 10 раз, а мне надо отработать событие только после удаления всех 10 строк. Обработка события можеть занимать длительное время, поэтому не хочется процесс повторять 10 раз.
Можно ли как-то настроить cxGrid так, чтобы событие OnAfterDelete возникало 1 раз? Ну или в обработчике события как-то проигнорировать первые 9 вызовов и отработать только последний.
Andreych74 вне форума Ответить с цитированием
Старый 07.06.2011, 22:12   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можете перед Delete программно определить к-во выделенных строк? Если да, то запомните в переменную, которая будет доступна и в OnAfterDelete. В OnAfterDelete вначале вычитайте из неё 1. Если не 0 - сразу выход, в противном случае - отрабатывайте событие.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.06.2011, 23:51   #3
Andreych74
Пользователь
 
Регистрация: 15.08.2008
Сообщений: 12
По умолчанию

Кол-во выделенных строк конечно можно узнать, но как это узнать непосредственно перед Delete? Его нельзя узнавать в самом событии OnAfterDelete, можно было бы кол-во строк определять ранее в OnBeforeDelete, но это событие тоже возникает 10 раз, к сожалению.
Есть еще событие OnSelectionChanged, в котором в принципе можно и запоминать в переменную кол-во выделенных строк, но это событие будет возникать даже при простом переходе на другую ячейку, не говоря уж о выделениии группы ячеек.
Ну видимо придется так и делать.
Andreych74 вне форума Ответить с цитированием
Старый 08.06.2011, 00:31   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Заведите переменную b: Boolean. Начальное значение True. В OnBeforeDelete если b=False - ничего не делать, иначе подсчитайте к-во выделенных строк и b:=False. В OnAfterDelete когда ваша переменная сбросится в 0 отрабатывайте событие и b:=True. Если не напутал, то должно сработать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.06.2011, 07:09   #5
Andreych74
Пользователь
 
Регистрация: 15.08.2008
Сообщений: 12
По умолчанию

да, все кажется логичным, должно сработать. Спасибо!
Andreych74 вне форума Ответить с цитированием
Старый 20.06.2011, 20:39   #6
afaik
Новичок
Джуниор
 
Регистрация: 28.04.2011
Сообщений: 1
По умолчанию

можно в настройках грида запретить удаление. делать это вручную, например по нажатию del, а в обработчике вызывать ADataController.DeleteSelection или DeleteFocused
afaik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как правильно обработать событие в 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