Как настроить столбцы DBAdvGrid для отображения данных из базы данных?

Я пытаюсь отобразить данные из таблицы базы данных в DBAdvGrid, чтобы в первом столбце отображался только флажок, а в других трех столбцах отображались метка, описание и поле изображения из таблицы базы данных. Я использую компоненты UniConnection, UniQuery, UniDatasource для отображения данных. Я устанавливаю свойства базы данных UniConnection через код, так как могу указать относительный путь к базе данных, а не полный путь. В инспекторе объектов он принимает только полный путь к базе данных.

Мой код выглядит следующим образом. В событии FormCreate

  filepath1 := ExtractFilePath(Application.ExeName);
  UniConnection1.Database := filepath1+'empdata.s3db';
  UniConnection1.Connected := True;
  UniQuery1.SQL.Text := 'Select '', label, description, image from emp';
  UniQuery1.Open;

  DBAdvGrid1.Columns[0].FieldName := '';
  DBAdvGrid1.Columns[2].FieldName := 'label';
  DBAdvGrid1.Columns[3].FieldName := 'description';
  DBAdvGrid1.Columns[4].FieldName := 'image';

Приведенный выше код успешно подключается и отображает данные, но проблема заключается в отображении данных в DBAdvGrid, поскольку я хочу, чтобы в первом столбце отображался только флажок (без данных из БД). В DBAdvGrid я не могу установить имя поля определенного столбца через инспектор объектов, поскольку он подключается к базе данных через код с путем извлечения пути.

Я установил для первого столбца свойства типа редактора DBAdvGrid значение edDataCheckBox, чтобы он отображал флажок в первом столбце, но он перекрывается данными метки, аналогично во втором столбце отображается «описание» и в изображении третьего столбца.

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

1st column - No Data
2nd column - label
3rd column - description
4th column - image

Что я получаю как

1st column - label overlapped with checkbox
2nd column - description
3rd column - image {MEMO}
4th column - 

Как разобраться с этой проблемой?

введите здесь описание изображения


person Ninad Avasare    schedule 21.11.2013    source источник


Ответы (1)


Вот как я рисую флажок в сетке: событие DrawColumnCell должно быть определено следующим образом.

const
 IsChecked : array[0..1] of Integer =
             (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);

procedure TForm.DBAdvGrid1DrawColumnCell(Sender: TObject;
          const Rect: TRect; DataCol: Integer; Column: TColumn;
          State: TGridDrawState);
var
 DrawRect: TRect;

begin
 if column.Index = 1 then  
  begin
   DrawRect:= Rect;
   drawrect.left:= rect.left + 24;
   InflateRect (DrawRect, -1, -1);
   DBAdvGrid1.Canvas.FillRect (Rect);
   DrawFrameControl (DBAdvGrid1.Canvas.Handle, DrawRect, DFC_BUTTON,
                     ISChecked[Column.Field.AsInteger]);
  end
 else DBAdvGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
end;
person No'am Newman    schedule 21.11.2013
comment
@ Ноам Ньюман, хороший ответ нашел новый способ поставить флажок в столбце. На самом деле я могу поместить checkboc в первый столбец DBAdvGrid с помощью свойства Editor DBAdvGrid.Column[1].Editor := edDataCheckBox. Основная проблема, с которой я здесь сталкиваюсь, связана с отображением данных в DBAdvGrid. Поскольку он также отображает флажок и данные поля метки в том же столбце. Я приложил скриншот. - person Ninad Avasare; 21.11.2013
comment
Здесь на самом деле он показывает данные поля «метка» в 1-м и 2-м столбцах. - person Ninad Avasare; 21.11.2013