Как я могу запустить обработчик событий после изменения значения в TcxGrid?
-
09-09-2019 - |
Вопрос
У меня есть DevExpress TcxGrid с обработчиком событий, прикрепленным к событию OnEditValueChanged в его GridView, которое должно суммировать некоторые данные в одном из столбцов.Проблема в том, что это событие запускается во время проверки, до того, как обновленное значение было записано в базовый набор данных.Я не слишком знаком с TcxGrid.Кто-нибудь знает, есть ли способ запустить обработчик событий после набор данных был обновлен?
Решение
Как насчет использования события DataSource.onDataChange?
Другие советы
Я не уверен, что это именно то, что вам нужно, но я обнаружил, что опция ImmediatePost в сетке очень полезна для ситуаций, когда мне нужно обновить сводку - она скрыта под своим свойством контроллера данных cxView.Это делает сетку похожей на электронную таблицу - как только пользователь нажимает enter или tab в ячейке, запись публикуется.Тогда, возможно, мое итоговое событие сработало бы из события AfterPost в наборе данных?
(Вы, вероятно, уже знаете это, но в самом gridview встроено множество очень полезных параметров суммирования - посмотрите на свойства Summary столбцов и убедитесь, что ShowFooter имеет значение true в ViewOptions - так что, если ваше резюме представляет собой относительно простое итоговое значение, среднее значение или что-то подобное, позвольте grid сделать все это и сэкономьте себе немного работы.)
Используете ли вы cxTableView или cxDBTableView в cxGrid
если вы используете cxDBTableView, то вы устанавливаете свое событие в datasource.onchange связанного источника данных в свойстве cxDBTableView.(cxDBTableView .datacontroller.источник данных)
Я бы пошел со скамрадтом :присмотритесь повнимательнее к событию, которое соответствует вашим ожиданиям.
В противном случае вы можете подключить свое событие, убедившись, что ваши данные инициализированы :
procedure TMyGrid.MyProc_OnDataLoaded( Sender : TObject ); //I made up this event, I'm not sure it exists
begin
Self.OnEditValueChanged := MyProc_OnEditValueChanged;
end;
Я бы настоятельно посоветовал вам НЕ использовать это как обычную привычку разработки (создание события, устанавливающего другой обратный вызов через код, - верный способ адской отладки), но если вы действительно не найдете другого способа сделать это...