如何在DBGrid中加入CheckBox控件

解决方案 »

  1.   

    使用IP3000 或者是IP4000,里面有一个控件wwDBGrid 可以支持很多控件(datatimepicker,combobox,checkbox.....)
      

  2.   

    用pickList属性吧,方便一点:      DM.adoquery1.open;
          a0:=TStringList.Create;
          repeat
          begin
            a0.Add(DM.adoquery1.FieldByName('CP_ID').asstring);
            DM.adoquery1.Next;
          end;
          until DM.adoquery1.Eof;
          DM.adoquery1.Close;
          DBGrid1.Columns[0].PickList:=a0;
          a0.Free;
      

  3.   

    用ehlib这个控件中的grid有这个功能.
      

  4.   

    建议使用IP3000 或者是IP4000
      

  5.   

    有一种办法时可以实现的,就是将你要加入CheckBox控件的那列,有一个字符来代替打钩(表示选择),有空格来代替不选择。  √  很象吗?  关键的一点就是这么字符怎么输入,来吧
    选择:智能ABC输入法,输入V1(V字符+数字字符1),你看到了吗,出现了很多奇怪的字符,可惜没有见到√,不要急,按PageDown四下,第8个就是。
      

  6.   

    unit DBGridUnit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, DBGrids, DB, ADODB, StdCtrls;type
      TForm1 = class(TForm)
        DataSource1: TDataSource;
        ADOConnection1: TADOConnection;
        DBGrid1: TDBGrid;
        ADOQuery1: TADOQuery;
        procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
          DataCol: Integer; Column: TColumn; State: TGridDrawState);
        procedure DBGrid1ColEnter(Sender: TObject);
        procedure DBGrid1ColExit(Sender: TObject);
        procedure SaveBoolean;
        procedure DBGrid1CellClick(Column: TColumn);
        procedure DBGrid1KeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
      private
        { Private declarations }
        OriginalOptions:TDBGridOptions;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.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.Brush.Color:=clWhite;
        DBGrid1.Canvas.FillRect(Rect);
        DrawFrameControl(DBGrid1.Canvas.Handle,
                         Rect,
                         DFC_BUTTON,
                         CtrlState[Column.Field.AsBoolean]);
    end;end;procedure TForm1.DBGrid1ColEnter(Sender: TObject);
    begin
    //确保该栏是逻辑字段
      if DBGrid1.SelectedField.DataType = ftBoolean then
      begin
       OriginalOptions:= DBGrid1.Options;
       DBGrid1.Options:= DBGrid1.Options - [dgEditing];
      end;
    end;procedure TForm1.DBGrid1ColExit(Sender: TObject);
    begin
      //确保该栏是逻辑字段
      if DBGrid1.SelectedField.DataType = ftBoolean then
        DBGrid1.Options := OriginalOptions;
    end;procedure TForm1.SaveBoolean;
    begin
      DBGrid1.SelectedField.DataSet.Edit;
      DBGrid1.SelectedField.AsBoolean:=not DBGrid1.SelectedField.AsBoolean;
      DBGrid1.SelectedField.DataSet.Post;
    end;procedure TForm1.DBGrid1CellClick(Column: TColumn);
    begin
      if DBGrid1.SelectedField.DataType=ftBoolean then
        SaveBoolean;
    end;procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if Key=VK_SPACE then
        SaveBoolean;
    end;end.