| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Как в DBGridEh пометить определённые записи? |
| Автор: BDmV 14.2.2008, 19:50 |
| Использую База данных: MySQL Конекчусь с помощью ZeosDBO Проссматриваю полученные данные через DBGridEh (EhLib 4.2) Для отчёта пользую FastReport 4.5 Задача состоит в следующем: Есть некая таблица из которой нужно распечатать данные помеченные пользователем. Попытки её решить: 1. Использовать выделение, встроенное в DBGridEh неудобно, т.к. пользователь всегда может забыть нажать Ctrl перед тем как ткнёт мышкой, после чего ему опять придётся "ползать" по таблице и выделять всё заново. :( 2. Пример приведённый в http://forum.vingrad.ru/forum/topic-180232/kw-checkbox-grid/hl/dbgrideh/index.html тоже несовсем подходит (хотя нравится больше чем №1) т.к. событие DrawColumnCell (прорисовка чекбокса) происходит раньше, чем CellClick (изменение списка нажатых чекбоксов) :( из за этого чекбокс меняет своё состояние после ухода из этой ячейки. 3. Держать в таблице отдельное поле, тоже неподойдёт, т.к. с программой будет рабботать не 1 человек и получить ситуацию, в которой 1 человек метить кучу записей и пока жмёт на кнопку "печать" все пометки скидываются из за того, что 2ой пользователь запустил своего клиента, который выполнил "update table set field_int_bool = 0" Может есть у кого нибудь, какие нибудь соображение по САБЖу? (Желательно с примерами ;) ) |
| Автор: Vas 15.2.2008, 09:13 |
| Я использую для такого VTable из компонентов ODAC, но думаю и в Zeos есть что-то типа виртуальной таблицы. Перегружаю данные в виртуальную таблицу, добавляю еще одно поле "Печать" тип boolean и все пусть пользователь клацает нужные записи. В репорте уже выводим у которых поле "Печать" отмечено и все |
| Автор: BDmV 15.2.2008, 09:30 | ||
В EhLib есть MemoTable, но это не выход из положения, т.к. данные из БД я беру SQL запросом вида:
и использую связку TzQuery -> TDataSource -> TDBGridEh Мне не хочется сюда вставлять, какой нить TMemTableEh и каждый раз при малейшем изменении данных гонять их из таблици памяти в БД и обратно... |
| Автор: Vas 15.2.2008, 10:05 |
| Дык я тоже беру запросом, и вообще я Table никогда не использую, токи квери и сторедпрок А если выгружается приемлимое количество, то перегон в меморитабл и не заметишь |
| Автор: BDmV 15.2.2008, 10:20 |
| Да сколькоб данных небыло... Память у компа не резиновая, и держать все записи в памяти желания нет.. Хотя я не знаю, как это с ODAC'ом происходит, Ораклы у мну нет. |
| Автор: BDmV 15.2.2008, 10:42 |
| Пытался рисовать, но вот как сделать так, чтоб сначало запоминался клик по чекбоксу, а потоп происходила прорисовка, я не понял. :( |
| Автор: Vas 15.2.2008, 15:01 |
Дык я к тому и клонил что твой клик и должен где-то запоминаться, ина че при следующей перерисовке все под откос пойдет |
| Автор: BDmV 15.2.2008, 16:30 |
| Ну дык я и говорю что я это помню, но перерисовка происходит после того как с этого поля уходишь, а мне нужно чтоб пользователь сразу увидел результат своего клика... А как с помощью ODAC Вы юзаете MemTable? Что то я в этих компанентах ничего связанного с MemTable я не вижу. :( А попытки связать TMemTableEh с TzQuery с последующим добавлением туда левого поля, приводят к тому же что и без TMemTable. :( Или всётаки Вы действительно каждый раз в цикле заполняете таблицу памяти? |
| Автор: Vas 15.2.2008, 18:21 | ||
Из ODAC я юзаю VTable, а не MemTable. И дальше писал что А MemTable вроде несколько другая хрень, но один фиг MemTable сразу из запроса тянет все данные в память и ниче
Отсюда я понял что как раз проблема с запоминанием еще до прорисовки |
| Автор: BDmV 15.2.2008, 19:17 |
Если остановится на варианте метить данные чекбоксами, то проблема именно в этом. А виртуалки в Zeos я не видел. :( |
| Автор: Vas 16.2.2008, 09:02 |
| Как вариант создаем временную таблицу, на основании запроса, добавляем еще одно поле и из нее отображаем данные пользователю. Как с ней работать закончили, удаляем. |
| Автор: BDmV 16.2.2008, 12:49 |
| Пробывал... Неинтересно. Если я TMemtableEh связываю с датасетом, то я могу туда добавлять поля, но изменять их значение, почему то, не могу, наверное потому что значения пытаются меняться во всей связанной записи. :( А создавать чисто таблицу в памяти, гонять данные из памяти в БД и обратно, а потом в конце работы удалять её, не хочу. Кстати, а есть какой нить способ реагировать на нажатие на столбце Indicator? У TDBGridEh я нашёл реакцию только на заголовок Индикатора... Мож тогда проще будет запоминать ID записи не на событии CellClick, а на нажатие на Индикатор? |
| Автор: Esperito 20.2.2008, 17:31 |
| Быть может, проще сделать переключатель "Режим выделения / Режим редактирования" для юзера и в режиме выделения использовать стандартное выделение и программно удерживать Ctrl. |
| Автор: BDmV 23.2.2008, 12:23 | ||||
Непроще :( Как я писал:
|
| Автор: Esperito 23.2.2008, 21:28 |
| Я же говорю, программно удерживать Ctrl, т.е. держать его нажатым (или сделать так, чтобы гриду он кажался нажатым). Чтобы пользователю не приходилось его нажимать самому. |
| Автор: BustA 6.6.2008, 09:23 |
| Люди помогите, а вот в эту memtable как добавит отдельное поле??? чтоб я потом в него программно данные записывал? |