Обработка полей Boolean, используя CheckBox
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;
Комментарии