Ofline
Сегодня мы научимся отображаться CheckBox-ы в компоненте DBGrid. И так, кладем на форму компоненты TTable:
Затем TDataSource:
И, наконец, саму TDBGrid:
Соединяем компоненты между собой. В этом же уроке описано, как создавать Alias-ы. Дело в том, что для реализации тестового примера этого урока нам потребуется база данных docs.db из Алиаса StorePrj. Собственно говоря, вы можете взять любую другую базу данных, а можете и вот эту(docs.db).
А теперь займемся программированием.
Если уж вы взяли именно вот эту базу данных, то для наглядности давайте откорректируем заголовок столбца DocType, замени его на "Это приход". Для этого напишем вот такой обработчик создания формы
Теперь пишем обработчики событий OnColEnter и OnDrawColumnCell нашего компонента TDbGrid:
Все, запускаем программу и видим результат:
Затем TDataSource:
И, наконец, саму TDBGrid:
Соединяем компоненты между собой. В этом же уроке описано, как создавать Alias-ы. Дело в том, что для реализации тестового примера этого урока нам потребуется база данных docs.db из Алиаса StorePrj. Собственно говоря, вы можете взять любую другую базу данных, а можете и вот эту(docs.db).
А теперь займемся программированием.
Если уж вы взяли именно вот эту базу данных, то для наглядности давайте откорректируем заголовок столбца DocType, замени его на "Это приход". Для этого напишем вот такой обработчик создания формы
Код:
procedure TfrmCheckBoxGridTest.FormCreate(Sender: TObject);
begin
dbgTest.Columns[3].Title.Caption:='Это приход';
end;
Теперь опишем процедуру отрисовки CheckBox-а:
procedure DrawGridCheckBox(Canvas: TCanvas; Rect: TRect; Checked: boolean);
var
DrawFlags: Integer;
begin
Canvas.TextRect(Rect, Rect.Left + 1, Rect.Top + 1, ' ');
DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONPUSH or DFCS_ADJUSTRECT);
DrawFlags := DFCS_BUTTONCHECK or DFCS_ADJUSTRECT;// DFCS_BUTTONCHECK
if Checked then
DrawFlags := DrawFlags or DFCS_CHECKED;
DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DrawFlags);
end;
Теперь пишем обработчики событий OnColEnter и OnDrawColumnCell нашего компонента TDbGrid:
Код:
procedure TfrmCheckBoxGridTest.dbgTestColEnter(Sender: TObject);
begin
with TDBGrid(Sender) do
if UpperCase(SelectedField.FieldName) = 'TYPEDOC' then // Модифицируйте под себя
Options := Options - [dgEditing]
else
Options := Options + [dgEditing]
end;
procedure TfrmCheckBoxGridTest.dbgTestDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if UpperCase(Column.FieldName) = 'TYPEDOC' then // Модифицируйте под себя
if Column.Field.AsInteger = 1 then
DrawGridCheckBox((Sender as TDBGrid).Canvas, Rect, true)
else
DrawGridCheckBox((Sender as TDBGrid).Canvas, Rect, false)
end;