Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
2-1155306514
Mr tray
2006-08-11 18:28
2006.09.10
Как узнать состояние ивента


3-1151685989
Bad tester
2006-06-30 20:46
2006.09.10
Подскажите как лучше работать с базой данных MySQL из Делфи?


2-1156172322
Sele
2006-08-21 18:58
2006.09.10
перемещение


15-1155503710
Юрий Зотов
2006-08-14 01:15
2006.09.10
IFC Capital Group


2-1156237255
GTAID
2006-08-22 13:00
2006.09.10
вызов программы через нажатие ctrl+shift+G





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский