Текущий архив: 2007.02.11;
Скачать: CL | DM;
Вниз
Как отловить перемещение по записям в гриде? Найти похожие ветки
← →
daser (2007-01-22 12:28) [0]
← →
Elen © (2007-01-22 12:41) [1]
> daser
Если имеется ввиду BDGrid, то прописать AfterScroll для TQuery или подобного компонента, который с ним связан.
Если имеется ввиду StringGrid, то прописать OnSelectCell.
← →
Ega23 © (2007-01-22 14:24) [2]
> Если имеется ввиду BDGrid, то прописать AfterScroll для
> TQuery или подобного компонента, который с ним связан.
Я бы не советовал. Вроде должно работать при TDataSet.DisableControls
Лучше использовать TDataSource.OnDataChange
← →
Elen © (2007-01-22 15:26) [3]
> Я бы не советовал
Не спорю, но поскольку всегда пользуюсь [1], хочу спросить - почему?
← →
zdm © (2007-01-22 15:30) [4]
> Ega23 © (22.01.07 14:24) [2]
Данные ведь могут меняться вне зависимости от перемещения по гриду.
← →
Ega23 © (2007-01-22 15:49) [5]
> Не спорю, но поскольку всегда пользуюсь [1], хочу спросить
> - почему?
> Данные ведь могут меняться вне зависимости от перемещения
> по гриду.
Ну вот, допустим, я хочу пробежаться но НД и что-то сделать. Задача вполне частая.
если я напишуWith MyDataSet do
begin
try
bm := GetBookmark;
First;
While not Eof do
begin
с FieldByName(...).Value сделать что-то.
Next;
end;
finally
GotoBookmark(bm);
end;
end;
В этом случае у меня грид начнёт перерисовываться, т.к. TDataSet рассылает событие о смене курсора всем "смотрящим" на него TDataSource, которые рассылают это событие всем "смотрящим" на него TDataLink, потомок которого есть в кишках каждого DB-компонента.
Чтобы этого не происходило, нужно перед перемещениями курсора вызвать метод DisableControls, а в блоке finally после перехода по ссылке - EnableControls.
В этом случае события о перемещении курсора НЕ БУДУТ передаваться визуальным компонентам. И с точки зрения пользователя "как бы" ничего не будет происходить.
Но при AfterScroll (сейчас специально посмотрел, вроде так и есть) этот метод будет вызываться.
← →
Elen © (2007-01-22 15:54) [6]
> Ega23
Ясно. Спасибо. Буду иметь ввиду - на всякий случай пригодится ;)
← →
zdm © (2007-01-22 16:08) [7]
> Ega23 © (22.01.07 15:49) [5]
Спасибо. Учтём.
← →
MsGuns © (2007-01-22 16:51) [8]>Но при AfterScroll (сейчас специально посмотрел, вроде так и есть) этот метод будет вызываться.
Без всяких "вроде". События датасета НЕ ЗАВИСЯТ от отображающих его объектов.
Один из способов избежать этого - сбрасывать события ДО выполнения "пробежек" по датасету и восстанавливать ПОСЛЕ.
Или (что ИМХО проще, использовать тэг датасета:
Procedure TDataModule1.ADODataSet1AfterScroll...
begin
With DataSet.Tag>0 then exit;
...
end;
← →
Ega23 © (2007-01-22 17:00) [9]
> Без всяких "вроде". События датасета НЕ ЗАВИСЯТ от отображающих
> его объектов.
> Один из способов избежать этого - сбрасывать события ДО
> выполнения "пробежек" по датасету и восстанавливать ПОСЛЕ.
>
> Или (что ИМХО проще, использовать тэг датасета:
>
> Procedure TDataModule1.ADODataSet1AfterScroll...
> begin
> With DataSet.Tag>0 then exit;
> ...
> end;
Это, кстати, одна из бед TDataSet - нет возможности узнать, чему равно поле FDisableCount.
← →
Игорь Шевченко © (2007-01-22 17:11) [10]
> В этом случае события о перемещении курсора НЕ БУДУТ передаваться
> визуальным компонентам. И с точки зрения пользователя "как
> бы" ничего не будет происходить.
> Но при AfterScroll (сейчас специально посмотрел, вроде так
> и есть) этот метод будет вызываться.
Точно также, как будут вызываться любые другие события TDataSet - а что тут такого, они не зависят от связи с DataLink"ами
← →
Ega23 © (2007-01-22 17:17) [11]
> Точно также, как будут вызываться любые другие события TDataSet
> - а что тут такого, они не зависят от связи с DataLink"ами
Правильно. Но речь в вопросе шла о Как отловить перемещение по записям в гриде?
В AfterScroll ещё и другие будешь ловить.
← →
Игорь Шевченко © (2007-01-22 17:27) [12]Ega23 © (22.01.07 17:17) [11]
> Правильно. Но речь в вопросе шла о Как отловить перемещение
> по записям в гриде?
> В AfterScroll ещё и другие будешь ловить.
Это да, будешь. Но у TDataSet я наблюдаю метод ControlsDisabled: Boolean
Это только у меня в Turbo Delphi 2006 ?
← →
Ega23 © (2007-01-22 17:33) [13]
> Это да, будешь. Но у TDataSet я наблюдаю метод ControlsDisabled:
> Boolean
>
> Это только у меня в Turbo Delphi 2006 ?
Дык вот... Нету такого свойства в Delphi 5. А ОЧЕНЬ не хватает.
Мне такие извраты пришлось наворачивать в DBTree, дабы отследить данную ситуацию... :((((
← →
Johnmen © (2007-01-22 23:06) [14]ControlsDisabled было, насколько помню, даже в D3.
А уж в D6 это точно.
← →
Германн © (2007-01-23 00:28) [15]
> Johnmen © (22.01.07 23:06) [14]
>
> ControlsDisabled было, насколько помню, даже в D3.
> А уж в D6 это точно.
>
TDataSet.DisableControls может быть?
← →
Германн © (2007-01-23 00:31) [16]Если да, то этот метод был и в Д1 у TTable и TQuery. TDataSet тогда ещё не было.
← →
Johnmen © (2007-01-23 00:44) [17]
> Германн © (23.01.07 00:28) [15]
Нет.
Именно ф-ия, возвращающая ДисайблКонтрол (True) или нет (False) в данный момент.
← →
Германн © (2007-01-23 01:20) [18]
> Johnmen © (23.01.07 00:44) [17]
>
>
> > Германн © (23.01.07 00:28) [15]
>
>
> Нет.
> Именно ф-ия, возвращающая ДисайблКонтрол (True) или нет
> (False) в данный момент.
>
А. Понял. В Д4 есть. В Д2 ещё не было (как и TDataSet).
← →
Ega23 © (2007-01-23 09:17) [19]
> А. Понял. В Д4 есть. В Д2 ещё не было (как и TDataSet).
Блиню. Или я туп, как пробка, или вы, товарищи, что-то путаете.
Где и у какого потомка TDataSet в Delphi 5 есть это свойство????
← →
novill © (2007-01-23 09:29) [20]Эта функция объявлена в классе Tdataset.
← →
Ega23 © (2007-01-23 09:36) [21]
> Эта функция объявлена в классе Tdataset.
Фу-у-ункция!!!!!
Тьфу, дьявол!!!
Всё, понёсся исправлять
← →
novill © (2007-01-23 09:58) [22]> [21] Ega23 © (23.01.07 09:36)
Только ты ее сначала своими глазами посмотри ) Просто чтобы удостовериться )
← →
Ega23 © (2007-01-23 10:02) [23]
> Только ты ее сначала своими глазами посмотри ) Просто чтобы
> удостовериться )
Да посмотрел уже...
Нет, это не то, что нужно.
А нужно событие на TDataSet.EnableControls. Причём не RecordChange
← →
MsGuns © (2007-01-23 10:16) [24]>Johnmen © (23.01.07 00:44) [17]
>Именно ф-ия, возвращающая ДисайблКонтрол (True) или нет (False) в данный момент.
Во блин ! Сколько работаю с датасетами, а не знал ;)
Спасибо за полезную инфу, Женя
Страницы: 1 вся ветка
Текущий архив: 2007.02.11;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.049 c