Статьи
|
Во многих статьях обсуждалось добавление компонентов в DBGrid. Это призвано для того, чтобы сделать более привлекательный и удобный визуальный интерфейс для редактирование полей в DBGrid: TComboBox - для открывающегося списка, TDateTimePicker для значений даты, TCheckBox для булевых значений.
CheckBox для булевых полей
Эта статья показывает один из методов использования CheckBox внутри DBGrid для редактирования и отображения булевых полей.
Мы предлагаем такой подход, в котором нужно только два обработчика событий для DBGrid: OnCellClick и OnCustomDrawCell:
// событие OnCellClik для DBGrid1
procedure TForm.DBGrid1CellClick(Column: TColumn) ;
begin
if (Column.Field.DataType=ftBoolean) then
begin
{ переключатель True и False}
Column.Grid.DataSource.DataSet.Edit;
Column.Field.Value:= not Column.Field.AsBoolean;
{ подтвердить изменения }
Column.Grid.DataSource.DataSet.Post;
{ Вы можете добавить дополнительные функции здесь,
которые будут обработаны после того, как будут сделаны изменения }
end;
end;
// событие OnDrawColumnCell для DBGrid1
procedure TForm.DBGrid1DrawColumnCell(
Sender: TObject;
const Rect: TRect;
DataCol: Integer;
Column: TColumn;
State: TGridDrawState) ;
const
CtrlState: array[Boolean] of integer =
(DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED) ;
begin
if (Column.Field.DataType=ftBoolean) then
begin
DBGrid1.Canvas.FillRect(Rect) ;
if VarIsNull(Column.Field.Value) then
DrawFrameControl(DBGrid1.Canvas.Handle,Rect,
DFC_BUTTON, DFCS_BUTTONCHECK or DFCS_INACTIVE) { неактивный }
else
DrawFrameControl(DBGrid1.Canvas.Handle,Rect, DFC_BUTTON,
CtrlState[Column.Field.AsBoolean]) ; { отмечен или нет }
end;
end;
|