Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.018 c
7-56925
TALLA
2003-07-16 00:18
2003.11.17
С завершением сервиса беда:(


1-56750
goliath
2003-11-06 15:57
2003.11.17
Приведите пожалуйста пример использования TVirtualTreeView


1-56732
~GaMeRd~
2003-11-06 08:35
2003.11.17
Как в Dll поместить HTML ки?


1-56655
Maks Realov
2003-11-05 11:23
2003.11.17
Аналог C-ого Union-а в Delphi есть?


14-56904
mate
2003-10-25 15:22
2003.11.17
Антивирус.