| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > проблема с ScrollBar в DBgrid |
| Автор: T1000 18.1.2007, 18:47 |
| Здравствуйте. У меня проблема - неправильно работает вертикальный скроллинг у DBGrid. Предисловие: работаю с dbf-файлами на Advantage Database Server. Для доступа к базе в Делфи (6ой) использую ADSConnection ADSTable DataSource DBGrid. Кол-во записей в базе порядка 2500. Проблема: У верт. скроллбара всего три положения - вверху, в центре, внизу. И все! При перемещении по записям скроллер всегда находится в серединке. Как только достигаю конечной записи, скроллер становится внизу. Как только достигаю нулевой записи, скроллер становится вверху. Помогите, товарищи, кто сталкивался. Надеюсь понятно объяснил. P.S. пробовал через ADO подконнектиться к базе access. При этом в DBGrid нормально работает скролл. |
| Автор: dimazu 18.1.2007, 20:02 | ||
| Поведение скрола зависит от датасета/базы (TDataset.IsSequenced=True) Если у тебя ADO/BDE.Paradox, то датасет знает recordcount (считываются ВСЕ записи и скрол будет плавным), а если BDE.DBase/Oracle/MS SQL/InterBase и т.д. - то нет (считываются только те, что будут показаны на экране).
|
| Автор: T1000 18.1.2007, 22:57 |
| Базы клиперовские. Так как же мне быть? |
| Автор: dimazu 18.1.2007, 23:05 |
| Используй сторонние компоненты или напиши наследника TTable. (ТМемTable) ЗЫ. Или конвертни в Парадокс, там все работает... |
| Автор: Vas 19.1.2007, 08:01 |
| Самый простой способ взять DBGridEh из библиотеки EhLib, до версии 4 бесплатный вот http://www.ehlib.com/RUS/default.htm |
| Автор: SergeBS 19.1.2007, 10:16 | ||
dimazu,
А если посмотреть исходники, то выяснится: скролл имеет только 3 положения на любой индексированной таблице. В том числе и парадоксовой. Если же подправить чуть исходники, то будет работать как на Парадоксе на любых НЕиндексированных таблицах. Но не в дизайнере, только в ран-тайм. |
| Автор: T1000 19.1.2007, 17:33 |
| Ребята, спасибо вам за ответы! Я не такой матёрый делфист как вы. Расскажите, что подправить в исходниках? А DBGridEh обязательно попробую. |
| Автор: SergeBS 19.1.2007, 17:56 | ||
DBTables.pas
Примерно так |
| Автор: dimazu 20.1.2007, 04:43 | ||
| Можно и так. Но, ИМХО, работать правильно все равно не будет. Paradox и dBase не одно и тоже. Я думаю, что при движении по одной записи (Next/Prior) (Up/Down кнопки у скрола) и PgUp/PgDn работать как-то будет (причем при первом нажатии, по логике, должен быть прыжок вниз на кол-во видимых записей в гриде), а при переходе на заданный номер за пределами видимых в гриде записей (GoTo (RecNo)) - работать не будет. Для проверки, надо зацепить ползунок у скрола и попробовать подвигать вверх вниз. Мне кажется, что перехода на другую запись, кроме первой и последней быть не должно. T.е. будет практически тоже самое, что и до изменений... Все относится к dBase only (с Paradox-ом и так работает без проблем)... ЗЫ. Если так, то может лучше все-таки прикрутить самостоятельный ScrollBar к DBGrid и работать с ним? Типа вот так:
|
| Автор: SergeBS 22.1.2007, 08:12 | ||
dimazu,
А ты попробуй. Я с Парадоксом уж лет 7 точно не работаю. |
| Автор: T1000 30.1.2007, 22:09 |
| Проблема решилась в полной (для меня) мере. У объекта adsTable есть свойство Sequenced. Устанавливаю true и вертикальный скролл начинает нормально работать. |