Внешний вид сайта:

Обработка полей Boolean, используя CheckBox

Во многих статьях обсуждалось добавление компонентов в 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;

Комментарии

Нет комментариев. Ваш будет первым!