Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > Checkbox в Grid |
Автор: ehy 4.11.2007, 01:47 |
Здравствуйте, подскажите пожалуйта! Есть таблица в БД, данные из которой выводятся в dbGrid. Необходимо добавить в grid ещё один столбец с CheckBox, не связанный с таблицей в БД, чтобы использовать все записи отмеченные галочкой, например выводить в отчет. Предполагаю, что можно использовать компонент DBGridEh, но никак не могу с ним разобраться... Если не трудно опишите пошагово... Ещё буду очень благодарна за русский мануал по EhLid ![]() |
Автор: ALeXandrK 4.11.2007, 02:58 |
Обычно это учитывают в базе данных, создавая соответствующее поле. |
Автор: ehy 4.11.2007, 11:56 | ||
В том то все и дело, что нет необходимости загромаждать таблицу в БД лишним полем... Попробую ещё раз описать: Есть например список дисциплин, с их характеристиками, и надо выбрать для конктерного отчета, только некоторые из них! В базе эту информацию хранить нет смысла, т.к. для следующего отчета, могут быть выбраны другие дисциплины |
Автор: ALeXandrK 4.11.2007, 19:23 |
Ну тебе же по лубому нужно показать checkbox для записи, а наиболее удобно для этого создать доп. поле. Это ж не загромаждение, а необходимая функциональность. Если не хочешь хранить доп. поле, то просто создавай его в Run-Time и удаляй перед сохранением БД. Другие варианты здесь просто будут более сложные, при чем эта сложность не будет оправдана. Не придумывай велосипед с квадратными колёсами! |
Автор: Fighter 4.11.2007, 22:11 |
Одно могу сказать, в стандартных дельфовских компонентах такого нет. А так, посмотри на www.torry.net, может там что найдешь. А вообще, действительно кажется слишком уж создавать отдельное поле для галок. Тем более что теперь каждый раз это поле очищать, так как предполагается, что нужно будет каждый раз выводить список и каждый раз выбирать нужные элементы. Так что покопай пока-что www.torry.net, а к тому моменту более опытные форумчане может что посоветуют, а может подтвердят то, что нужно создавать отдельное поле. |
Автор: Savek 5.11.2007, 10:02 | ||||
Если доп. поле не создавать, то список значений где-то нужно хранить. Здесь видится такой вариант: в грид добавляем колонку, не подключенную к датасету и в событии OnDrawColumnCell отрисовываем в этой колонке изображение CheckBoxa. При нажатии мышкой на указанное поле добавляем номер соотв. строки в StringList (это будет список отмеченных чекбоксов) или удаляем его оттуда, если оно там уже есть. При отрисовке проверяем наличие текущей строки в StringList-е и рисуем изображение отмеченного/неотмеченного чекбокса. Процедура отрисовки чекбокса может выглядеть так:
вот ее вызов
вроде понятно изложил... |
Автор: ehy 5.11.2007, 12:34 |
Спасибо большое, что откликнулись! Буду рыть дальше)))) Savek, а что это - StringList? Компонент? Свойство DBGrid? Что-то не могу понять ![]() |
Автор: Fighter 5.11.2007, 12:43 |
Так а что тут рыть, тебе вроде непосредственно ответили. |
Автор: ALeXandrK 5.11.2007, 13:03 |
Мне кажется вы начили танцевать с бубном. Добавлять и удалять поле намного проще, да и работать с данными таким образом тоже проще! |
Автор: Savek 5.11.2007, 14:45 | ||
Это уж автору решать, я всего лишь вариант предложил.. |
Автор: Akella 5.11.2007, 16:40 | ||
можно непосредственно в компоненте TDataSet создать новое поле типа Boolean (fkData), например с именем 'ToReport'. Не путай, не в самой таблице на диске, а в компоненте. Далее в гриде, в свойствах столбца поставить CheckBox := True. Теперь можно и так узнать, что отправлять в отчет:
|
Автор: ehy 5.11.2007, 22:03 |
Akella, Насколько я поняла, ты работаешь с EhLib? Тогда конкретный вопросик про него: Новое поле я создала и в DataSetе и в Grid добавила и CheckBo добавила, это мне в принципе и так понятно было, да и способ отбора для отчета тоже! Вопрос в другом: когда запускаю проект, колонка с чекбоксами неактивна(галочки поставить нельзя!). Пробовала делать это поле вычисляемым и присваивать значение False, тогда поле активно, галочек нет, но и поставить их нельзя. Если назначить на клик мыши FieldValue['Поле'] = True, то галочка ставиться, но не сохраняется (при клике на другой строке исчезает). Где я ошибаюсь? Может не на клик надо назначать FieldValue['Поле'] = True? Может поле должно быть не вычисляемым? Кажется я просто упускаю, ещё какую-то небольшую настройку! Подскажи, плиз! Заранее спасибо! |
Автор: Akella 7.11.2007, 22:04 |
ну не знаю, как ты там создавала, вот тебе примерчег |
Автор: Akella 7.11.2007, 22:08 | ||
а так, как состояние значений полей может запоминаться, то чтобы не мучаться, то при открытии формы выполняй запрос
Напиши хранимку, которая будет выполнять этот запрос |
Автор: ehy 10.11.2007, 21:11 |
Теперь разобралась! Спасибо Akella за отзывчивость ![]() |