Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Checkboxes в Dbgrid


Автор: MadCoder 16.5.2008, 09:58
Здравствуйте!

Помогите с DbgridEh. Я выгружаю из БД данные в DbgridEh, пользователь их смотрит, выбирает галочками нужные (checkboxes), нажимает кнопку "Ок" и данные грузятся дальше. Как мне сделать checkboxes и как выгрузить данные из таблицы, отмеченные чекбоксами?

Автор: Frees 16.5.2008, 10:46
я это делал так:

у дата сета добовляю вычислимое поле где храню галку при клике по гриду и по этому полю записываю ИД текущей записи в список а в событий вычисления поля смотрю если идешник есть в списке то вычислимому полю присваиваю true в итоге у меня есть список выбранных ИД

суть такая если что не понятно спрашивай

Автор: MadCoder 16.5.2008, 10:57
Вот мой датасет:

SearchResult_Table.DataSource.DataSet

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

Автор: Frees 16.5.2008, 11:25
а вычислимое поле в  дизигн тайме добавь 
Код

private 
 ListId := TStringList;
.....

procedure TForm1.Create(Sender: TObject);
begin
  ListId := TStringList.Create;
end;
procedure TForm1.CalcFields(DataSet: TDataSet);//событие OnCalcFields у дата сета
var Index: string;
begin
  Index := IntToStr(DataSet.FieldByName('ID').asInteger);
  DataSet.FieldByName('CHECK').AsBoolean := ListId.IndexOf(Index) <> -1;
end;

procedure TForm1.DBGridCellClick(Column: TColumnEh);//событие клика по колонке грида
var valС: string;
 Id: string;
begin
  if Column.FieldName = 'CHECK' then begin
     Id := IntToStr(DataSet.FieldByName('ID').asInteger);
     if ListId.IndexOf(Id)>0 then
        ListId.Delete(ListId.IndexOf(Id))
     else
        ListId.add(id);
  end;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)