如何在dbgrid或者别的数据库网格中加入dbcheckbox或者其它checkbox控件
要求是,要随机控制,比如说,要哪个随便哪一格,哪一行,哪一列,都可以加入的,dbcheckbox控件.

解决方案 »

  1.   

    第三方控件EHLIB3.2去下载这个吧它能实现你的要求。它对每一字段都有单独的选项!
    如有还有问题就留言!
      

  2.   

    如果你不想用第三方控件的话,我建议你用TDBCtrlGrid这个控件,你可以在上面放你想要的checkbox,兄弟你试试!
      

  3.   

    非逻辑字段添加checkbox有意义么?
    简单一点,自己画一个checkbox,如下:
    procedure TFrmWHouse.DBGrid1ColExit(Sender: TObject);
    begin
      //确保该栏是逻辑字段
      if DBGrid1.SelectedField.DataType = ftBoolean then
         DBGrid1.Options := OriginalOptions;
    end;procedure TFrmWHouse.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);
        DrawFrameControl(DBGrid1.Canvas.Handle,Rect,DFC_BUTTON,CtrlState[Column.Field.AsBoolean]);
      end;end;procedure TFrmWHouse.DBGrid1CellClick(Column: TColumn);
    begin
      if DBGrid1.SelectedField.DataType = ftBoolean then
        SaveBoolean();
    end;procedure TFrmWHouse.DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if ( Key = VK_SPACE ) and
       ( DBGrid1.SelectedField.DataType = ftBoolean ) then
       SaveBoolean();
    end;procedure TFrmWHouse.SaveBoolean;
    begin
      DBGrid1.SelectedField.Dataset.Edit;
      DBGrid1.SelectedField.Value := not DBGrid1.SelectedField.AsBoolean;
      DBGrid1.SelectedField.Dataset.Post;
    end;