Текущий архив: 2003.11.17;
Скачать: CL | DM;
ВнизКак отследить передвижение по записям в DBGrid Найти похожие ветки
← →
Vick (2003-10-29 12:42) [0]Доброго всем дня!!
Есть такая ситуация: при перемещении курсора от записи к записи в DBGrid нужно выполнять какие-либо определенные действия. Вешаю выполнение этих действий на событие MyDataSet.AfterScroll - работает отлично, но возникает одна фигня. Когда я пытаюсь включить фильтр (runtime - фильтрация происходит динамически, в зависимости от того, какое поле выберешь) либо выключит его, то происходит значительное замедление работы фильтрации в связи с тем, что отрабатывает AfterScroll. Может есть какая-либо альтернатива этому событию, чтобы она не срабатывала на обновление ДатаСета, а только на перемещение по записям???
← →
Vlad (2003-10-29 12:46) [1]Ставь флаг в AfterScroll, когда не нужно чтоб это событие срабатывало, ставь флаг=false, а в AfterScroll пропиши строчку:
if not flag then exit;
← →
bushmen (2003-10-29 12:46) [2]А если сделать отслеживание не по DbGrid, а по ADOQuery (или что ты используешь) - OnMoveComplete
← →
Sandman25 (2003-10-29 12:46) [3]
with DataSet do
begin
AfterScroll := nil;
try
Filtered := false;
Filter := ...
Filtered := True;
finally
AfterScroll := MyAfterScroll;
end;
end;
← →
AlexGUEST (2003-10-29 13:03) [4]А если отслеживать на TDataSource.OnDateChange?
← →
Vick (2003-10-29 13:09) [5]Ребят, есть одна большая фигня - это ClientDataSet!!!!
← →
Vlad (2003-10-29 13:13) [6]>Vick © (29.10.03 13:09) [5]
И что ? В чем разница ?
Варианты [1], [3] разве не подходят ?
← →
Vick (2003-10-29 13:18) [7]>Vlad ©
3-й попробовала, фильтр выключился, данные получила быстро, но когда перескочила на следующую запись AfterScroll решил выполнить для действия для всех записей - на это ушло времени достаточно много. Как он вообще работает?
← →
Vlad (2003-10-29 13:23) [8]>Vick © (29.10.03 13:18) [7]
Код можно ?
← →
Vick (2003-10-29 13:32) [9]код отключения фильтра
procedure TCoolWindowPopupM.DelFilterItemClick(Sender: TObject);
begin
if CurData <> nil then
CurData.Filtered := false;
end;
код AfterScroll
procedure Tw_Rashod_Nakl.cdsDOC_TABLESAfterScroll(DataSet: TDataSet);
begin
////Выполняю разные процедуры (например подсчет остатка на сладе товара, на котором стоит курсор)
end;
Фильтр и AfterScroll находятся в разных формах, т.к. форма с фильтром вызывется во всех отчетах, как параметры ей передается грид и датасет. Как только происходит CurData.Filtered := false, сразу срабатывает AfterScroll.
← →
AlexGUEST (2003-10-29 13:34) [10]TDataSource.OnDateChange срабатывает при редактировании поля, при передвижении со строки на строку и при перемещении между полями.
Не подходит?
← →
Sandman25 (2003-10-29 15:11) [11]> Как только происходит CurData.Filtered := false, сразу срабатывает AfterScroll.
Естественно. Именно поэтому см. [3] Sandman25 © (29.10.03 12:46)
Страницы: 1 вся ветка
Текущий архив: 2003.11.17;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.01 c