![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отследить передвижение по записям в DBGrid [D5, MSSQL]
Vick © (2003-10-29 12:42:00)
Доброго всем дня!!
Есть такая ситуация: при перемещении курсора от записи к записи в DBGrid нужно выполнять какие-либо определенные действия. Вешаю выполнение этих действий на событие MyDataSet.AfterScroll - работает отлично, но возникает одна фигня. Когда я пытаюсь включить фильтр (runtime - фильтрация происходит динамически, в зависимости от того, какое поле выберешь) либо выключит его, то происходит значительное замедление работы фильтрации в связи с тем, что отрабатывает AfterScroll. Может есть какая-либо альтернатива этому событию, чтобы она не срабатывала на обновление ДатаСета, а только на перемещение по записям???
Sandman25 (2003-10-29 15:11:00) [1]
> Как только происходит CurData.Filtered := false, сразу срабатывает AfterScroll.
Естественно. Именно поэтому см. [3] Sandman25 © (29.10.03 12:46)
AlexGUEST (2003-10-29 13:34:00) [2]
TDataSource.OnDateChange срабатывает при редактировании поля, при передвижении со строки на строку и при перемещении между полями.
Не подходит?
Vick (2003-10-29 13:32:00) [3]
код отключения фильтра
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.
Vlad (2003-10-29 13:23:00) [4]
>Vick © (29.10.03 13:18) [7]
Код можно ?
Vick (2003-10-29 13:18:00) [5]
>Vlad ©
3-й попробовала, фильтр выключился, данные получила быстро, но когда перескочила на следующую запись AfterScroll решил выполнить для действия для всех записей - на это ушло времени достаточно много. Как он вообще работает?
Vlad (2003-10-29 13:13:00) [6]
>Vick © (29.10.03 13:09) [5]
И что ? В чем разница ?
Варианты [1], [3] разве не подходят ?
Vick (2003-10-29 13:09:00) [7]
Ребят, есть одна большая фигня - это ClientDataSet!!!!
AlexGUEST (2003-10-29 13:03:00) [8]
А если отслеживать на TDataSource.OnDateChange?
Vlad (2003-10-29 12:46:00) [9]
Ставь флаг в AfterScroll, когда не нужно чтоб это событие срабатывало, ставь флаг=false, а в AfterScroll пропиши строчку:
if not flag then exit;
bushmen (2003-10-29 12:46:00) [10]
А если сделать отслеживание не по DbGrid, а по ADOQuery (или что ты используешь) - OnMoveComplete
Sandman25 (2003-10-29 12:46:00) [11]
with DataSet do
begin
AfterScroll := nil;
try
Filtered := false;
Filter := ...
Filtered := True;
finally
AfterScroll := MyAfterScroll;
end;
end;