![]() |
|
|
![]()
|
|
| AndreySh34 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 19.5.2014 Репутация: нет Всего: нет |
Здравствуйте!
Связка TIbQuery -> TDataSource -> TDBGridEh Select в TIbQuery возвращает тысячи записей. Естественно, что все они сразу не отображаются в TDBGridEh. Предположим TDBGridEh такого размера, что умещаются только 5 записей, остальные будут показываться при скроллинге. Подскажите есть ли возможность узнать попала ли, непосредственно в эти 5, запись с определенным значением какого либо поля? |
|||
|
||||
| PointerToNil |
|
|||
![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 17.6.2013 Репутация: 1 Всего: 6 |
в гриде нет данных (с), он берет их из датасета (в данном случае квери)
пройтись в цикле по 5 первым записям TIbQuery и проверить для этого пригодятся методы TIbQuery.DisableControls, .First, .Next, .Eof и .EnableControls в принципе можно вставить проверку в обработчик события TIbQuery.OnFilterRecord или .OnCalcFields (обеспечив условия для его вызова) - она бы устанавливала некий отдельно хранящийся флаг "найдено" (не забывать сбрасывать его в нужные моменты) - тогда можно обойтись без лишнего скроллинга датасета Это сообщение отредактировал(а) PointerToNil - 19.5.2014, 19:54 |
|||
|
||||
| AndreySh34 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 19.5.2014 Репутация: нет Всего: нет |
Вариант пройтись по первым записям не подходит, что в таком случае делать если в гриде сдвинули скроллбар?
А нет ли возможности получить доступ именно к тем записям, которые датасет передает для отображения в грид? |
|||
|
||||
| AndreySh34 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 19.5.2014 Репутация: нет Всего: нет |
Я не совсем верно задал вопрос.
Мне нужно не раскрасить запись, когда она появилась в гриде, а точно узнать что ее нет в этих выведенных записях. Вообще программа в этом гриде отображает некий длительный процесс. Он может длиться секунду, а может минуту. Я точно знаю когда он начался и когда закончился. На это время я крашу строку, соответствующую этому процессу в таблице. Все хорошо, но как только пользователь сматывает таблицу вниз, и строка с текущим процессом уходит за экран все становится ненаглядным. Не ясно происходит что-то или нет. В таком случае я хочу в DbGridEh выводить Footer и в нем выводить данные, но для этого нужно знать что текущая запись не попала на экран. Я бы и циклом пробежался по записям, но где взять именно тот набор, что на экране? |
|||
|
||||
| PointerToNil |
|
|||
![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 17.6.2013 Репутация: 1 Всего: 6 |
"В таком случае я хочу в DbGridEh выводить Footer и в нем выводить данные" - то есть футер или данные в нем будут то появляться, то пропадать? сомнительное интерфейсное решение. не лучше ли показывать его/их всегда? и голову ломать не придется
если все-таки городить огород, то вот там, где вы "красите строку, соответствующую этому процессу в таблице", устанавливайте нелокальный флаг "покрашено" а там, где обновляете футер - сбрасывайте этот флаг, делайте Grid.Refresh и проверяйте флаг (делалась ли при перерисовке грида покраска) без лишнего рефреша пока не знаю как обойтись Это сообщение отредактировал(а) PointerToNil - 20.5.2014, 16:15 |
|||
|
||||
| AndreySh34 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 19.5.2014 Репутация: нет Всего: нет |
Да, то появляться, то пропадать. Если показывать всегда, тогда, если мы таблицу не прокручивали, данные будут появлять в 2-х местах - в футере и, собственно на своем месте. Согласен, интерфейсное решение не очень. Ничего лучше придумать не смог. Если бы была возможность "закрепить" положение одной записи в таблице, то это возможно помогло бы. Еще флаг сбрасывать можно в AfterScroll Query и устанавливать его в DrawColumnCell когда условие выполняется. Но так тоже получается один лишний Refresh. |
|||
|
||||
| PointerToNil |
|
|||
![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 17.6.2013 Репутация: 1 Всего: 6 |
"данные будут появлять в 2-х местах - в футере и, собственно на своем месте.
Ничего лучше придумать не смог." 1) вместо футера выводить в отдельной статусной строке из DBText - уже не "удвоение" 2) отфильтровывать из таблицы и показывать только в футере |
|||
|
||||
| AndreySh34 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 19.5.2014 Репутация: нет Всего: нет |
To PointerToNil:
Да, надо что-то поменять. Спасибо за помощь и подсказки! |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |