Форум: "Базы";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];
ВнизКак отловить момент, когда в DBGrid-е перешли на другую запись? Найти похожие ветки
← →
Bless © (2006-07-03 12:58) [0]Очевидный ответ - написать обработчик события ADODataSet1.AfterScroll.
Но тут имеется один неприятный момент:
если мы находясь посредине грида (не обязательно посредине, лишь бы не на первой(последней) записи), нажимая стрелочки (именно стрелочки, а не home, end), попали на первую (последнюю) запись, то последующее нажатие клавиши вверх (вниз) сгенерирует еще одно событие AfterScroll, хотя мы так и остаемся на первой (последней) записи.
И хотя такое поведение вполне объяснимо, эти два AfterScroll-а с точки зрения моей логики лишние.
Как бы мне отследить, что хотя AfterScroll возник, на другую запись мы не перешли?
← →
Ega23 © (2006-07-03 13:11) [1]Посмотри в сторону TDataSource.OnDataChange
← →
Плохиш © (2006-07-03 13:15) [2]
> Посмотри в сторону TDataSource.OnDataChange
Он тоже два раза вызывается.
← →
Плохиш © (2006-07-03 13:19) [3]
> Как бы мне отследить, что хотя AfterScroll возник, на другую
> запись мы не перешли?
Проверяй Bof и Eof у DataSet
← →
sniknik © (2006-07-03 13:20) [4]> Как бы мне отследить, что хотя AfterScroll возник, на другую запись мы не перешли?
проверяй BOF, EOF. по идее первый переход не взведет этот флаг, а во втором он будет установлен.
← →
Bless © (2006-07-03 14:08) [5]проверяй BOF, EOF. по идее первый переход не взведет этот флаг, а во втором он будет установлен.
Но ведь на первую запись и по Ctrl+Home могли переместиться, а в этом случае bof= true сразу.
Я хочу сказать, не всякому bof = true соответствует фальшивый AfterScroll.
← →
Плохиш © (2006-07-03 15:16) [6]
> Bless © (03.07.06 14:08) [5]
Можно узнать, что за обработка проводиться, что для неё критично количество вызовов событий OnAfterScroll?
← →
Bless © (2006-07-03 17:23) [7]Плохиш © (03.07.06 15:16) [6]>
Есть два грида. В нижнем гриде отображаются некоторые данные, соответствующие текущей строке в верхнем гриде. Короче говоря, master-detail.
Но я не хочу переоткрывать датасет, соответствующий нижнему гриду всякий раз, как изменилась запись в первом датасете, чтоб не гонять ненужные запросы по сети в случае простого скроллирования по верхнему гриду в поисках нужной записи.
Нижний датасет открываю только по даблклику (или Enter-у).
И закрываю, когда на верхнем гриде ушли с текущей записи (OnAfterScroll).
Все нормально. Вот только если человек даблкликнул на первой строчке в верхнем гриде (нижний грид заполнился), а потом (пусть нечаянно) нажал кнопочку "вверх", то AfterScroll закроет нижний грид, хотя запись в верхнем гриде осталась той же.
Это не проблема и я ее уже решил. Просто хотелось услышать чужие мнения по этому поводу. Всегда есть вероятность, что тривиальный ответ лежит на поверхности, а я его не вижу :)
Короче, я надеялся, а вдруг будет ответ в духе "RTFM, набери слово .... и нажми F1"
← →
evvcom © (2006-07-03 17:35) [8]> [7] Bless © (03.07.06 17:23)
Надеюсь в нижний грид/датасет ключевой параметр передаешь? Ну и сравнивай его с полем в верхнем гриде/датасете и делай вывод, переоткрывать или нет. Не вижу проблемы.
← →
Bless © (2006-07-03 19:47) [9]
> evvcom © (03.07.06 17:35) [8]
> Не вижу проблемы.
> Bless © (03.07.06 17:23) [7]
> Это не проблема и я ее уже решил.
← →
имя (2006-07-03 21:31) [10]Удалено модератором
← →
ЮЮ © (2006-07-04 02:49) [11]
> Медвед (03.07.06 21:31) [10]
Для закрытия, естественно (см.[7]). Это понятно и ежу :)
← →
Johnmen © (2006-07-04 11:49) [12]>Bless ©
Я бы запоминал значение ключевого поля в BeforeScroll, а в AfterScroll сравнивал с текущим и при несовпадении давил бы деталь (если она активна).
← →
имя (2006-07-04 15:00) [13]Удалено модератором
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.069 c