Как настроить столбцы DBAdvGrid для отображения данных из базы данных?
Я пытаюсь отобразить данные из таблицы базы данных в DBAdvGrid, чтобы в первом столбце отображался только флажок, а в других 3 столбцах будут отображаться метка, описание и поле изображения из таблицы базы данных. Я использую компоненты 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 -
Как решить эту проблему?
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;