Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Checkbox в Grid 
:(
    Опции темы
ehy
  Дата 4.11.2007, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.10.2007

Репутация: нет
Всего: нет



Здравствуйте, подскажите пожалуйта!

Есть таблица в БД, данные из которой выводятся в dbGrid. Необходимо добавить в grid ещё один столбец с CheckBox, не связанный с таблицей в БД, чтобы использовать все записи отмеченные галочкой, например выводить в отчет.

Предполагаю, что можно использовать компонент DBGridEh, но никак не могу с ним разобраться... 
Если не трудно опишите пошагово... Ещё буду очень благодарна за русский мануал по EhLid smile 
PM MAIL   Вверх
ALeXandrK
Дата 4.11.2007, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 6



Обычно это учитывают в базе данных, создавая соответствующее поле.


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
ehy
Дата 4.11.2007, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.10.2007

Репутация: нет
Всего: нет



Цитата(ALeXandrK @ 4.11.2007,  02:58)
Обычно это учитывают в базе данных, создавая соответствующее поле.

В том то все и дело, что нет необходимости загромаждать таблицу в БД лишним полем...
Попробую ещё раз описать: Есть например список дисциплин, с их характеристиками, и надо выбрать для конктерного отчета, только некоторые из них! В базе эту информацию хранить нет смысла, т.к. для следующего отчета, могут быть выбраны другие дисциплины
PM MAIL   Вверх
ALeXandrK
Дата 4.11.2007, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 6



Ну тебе же по лубому нужно показать checkbox для записи, а
наиболее удобно для этого создать доп. поле.

Это ж не загромаждение, а необходимая функциональность.
Если не хочешь хранить доп. поле, то просто создавай его
в Run-Time и удаляй перед сохранением БД.

Другие варианты здесь просто будут более сложные, при чем эта
сложность не будет оправдана.

Не придумывай велосипед с квадратными колёсами!


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
Fighter
Дата 4.11.2007, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 810
Регистрация: 5.1.2005

Репутация: нет
Всего: 2



Одно могу сказать, в стандартных дельфовских компонентах такого нет. А так, посмотри на 
www.torry.net, может там что найдешь. 

А вообще, действительно кажется слишком уж создавать отдельное поле для галок. Тем более что теперь каждый раз это поле очищать, так как предполагается, что нужно будет каждый раз выводить список и каждый раз выбирать нужные элементы. Так что покопай пока-что www.torry.net, а к тому моменту более опытные форумчане может что посоветуют, а может подтвердят то, что нужно создавать отдельное поле. 
PM MAIL   Вверх
Savek
Дата 5.11.2007, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



Если доп. поле не создавать, то список значений где-то нужно хранить. Здесь видится такой вариант: в грид добавляем колонку, не подключенную к датасету и в событии OnDrawColumnCell отрисовываем в этой колонке изображение CheckBoxa. При нажатии мышкой на указанное поле добавляем номер соотв. строки в StringList (это будет список отмеченных чекбоксов) или удаляем его оттуда, если оно там уже есть. При отрисовке проверяем наличие текущей строки в StringList-е и рисуем изображение отмеченного/неотмеченного чекбокса. Процедура отрисовки чекбокса может выглядеть так:
Код

procedure TForm1.DrawCheckBox(Canvas: TCanvas; Rect: TRect;
  Checked: boolean);
  var DrawFlags : integer;
       re : TRect;
begin
re:=rect;
re.Top:=re.Top+2;
re.Bottom:=re.Bottom-2;
Canvas.TextRect(Rect,Rect.Left+1,Rect.Top+1,' ');
if Checked then
  DrawFlags:=DFCS_flat or DFCS_CHECKED
else
  DrawFlags:=DFCS_flat;
DrawFrameControl(Canvas.Handle,Re,DFC_BUTTON,DrawFlags);
end;



вот ее вызов
Код

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
with DBGrid1 do begin
// Отрисовка чекбокса
if Column.Index=5 then//номер колонки с чекбоксом
  DrawCheckbox(DBGrid1.Canvas,Rect,StringList.IndexOf(Datasource.DataSet.RecNo)>-1);
  end;
end;



вроде понятно изложил...
PM MAIL   Вверх
ehy
  Дата 5.11.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.10.2007

Репутация: нет
Всего: нет



Спасибо большое, что откликнулись! Буду рыть дальше))))

Savek, а что это - StringList? Компонент? Свойство DBGrid? Что-то не могу понять smile 

PM MAIL   Вверх
Fighter
Дата 5.11.2007, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 810
Регистрация: 5.1.2005

Репутация: нет
Всего: 2



Так а что тут рыть, тебе вроде непосредственно ответили.
PM MAIL   Вверх
Savek
Дата 5.11.2007, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



Цитата(ehy @  5.11.2007,  12:34 Найти цитируемый пост)
Savek, а что это - StringList? Компонент? Свойство DBGrid? Что-то не могу понять 

Это глобальная переменнная

Код

var
Form1 : TForm1;
StringList : TStringList;

PM MAIL   Вверх
ALeXandrK
Дата 5.11.2007, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 6



Мне кажется вы начили танцевать с бубном.
Добавлять и удалять поле намного проще, да и работать с данными таким
образом тоже проще!


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
Savek
Дата 5.11.2007, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



Цитата(ALeXandrK @  5.11.2007,  13:03 Найти цитируемый пост)
Добавлять и удалять поле намного проще, да и работать с данными таким
образом тоже проще!

Это уж автору решать, я всего лишь вариант предложил..
PM MAIL   Вверх
Akella
Дата 5.11.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



можно непосредственно в компоненте TDataSet создать новое поле типа Boolean (fkData), например с именем 'ToReport'. Не путай, не в самой таблице на диске, а в компоненте. Далее в гриде, в свойствах столбца поставить CheckBox := True.
Теперь можно и так узнать, что отправлять в отчет:

Код

If DBGridEh1.DataSource.dataset.FieldByName('ToReport').asBoolean then отправляем запись в отчет

PM MAIL   Вверх
ehy
Дата 5.11.2007, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.10.2007

Репутация: нет
Всего: нет



Akella, Насколько я поняла, ты работаешь с EhLib? Тогда конкретный вопросик про него: 
Новое поле я создала и в DataSetе и в Grid добавила и CheckBo добавила, это мне в принципе и так понятно было, да и способ отбора для отчета тоже! Вопрос в другом: когда запускаю проект, колонка с чекбоксами неактивна(галочки поставить нельзя!). Пробовала делать это поле вычисляемым и присваивать значение False, тогда поле активно, галочек нет, но и поставить их нельзя. Если назначить на клик мыши FieldValue['Поле'] =  True, то галочка ставиться, но не сохраняется (при клике на другой строке исчезает). Где я ошибаюсь? Может не на клик надо назначать FieldValue['Поле'] =  True? Может поле должно быть не вычисляемым? Кажется я просто упускаю, ещё какую-то небольшую настройку! Подскажи, плиз!
Заранее спасибо!
PM MAIL   Вверх
Akella
  Дата 7.11.2007, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



ну не знаю, как ты там создавала, вот тебе примерчег

Присоединённый файл ( Кол-во скачиваний: 111 )
Присоединённый файл  Projects.rar 488,15 Kb
PM MAIL   Вверх
Akella
  Дата 7.11.2007, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



а так, как состояние значений полей может запоминаться, то чтобы не мучаться, то при открытии формы выполняй запрос
Код

update table set field_int_bool = 0


Напиши хранимку, которая будет выполнять этот запрос

Это сообщение отредактировал(а) Akella - 8.11.2007, 00:10
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0896 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.