Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как отследить передвижение по записям в 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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо