如题。谢谢大家!!!

解决方案 »

  1.   

    可以
    procedure Tform1.suiDBGrid3CellClick(Column: TColumn);/////dbgrid的自带事件
    begin
         If suiDBGrid3.SelectedField.DataType = ftBoolean Then
        begin      
          suiDBGrid3.SetFocus;
          Tform1.SaveBoolean();
        end;
    end;procedure Tform1.suiDBGrid3ColEnter(Sender: TObject);/////dbgrid的自带事件
    begin
      If  suiDBGrid3.SelectedField.DataType = ftBoolean then
        Begin
          OriginalOptions := suiDBGrid3.Options;
          suiDBGrid3.Options := suiDBGrid3.Options - [dgEditing];
        End;
    end;
    procedure Tform1.suiDBGrid3DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);/////dbgrid的自带事件
    const
      CtrlState : Array[Boolean] of Integer =(DFCS_BUTTONCHECK or DFCS_MONO,DFCS_BUTTONCHECK or DFCS_CHECKED);
      //CtrlState : Array[Boolean] of Integer =(DFCS_BUTTONCHECK,DFCS_BUTTONCHECK or DFCS_CHECKED);
    Begin
          If Column.Field.DataType = ftBoolean Then
         Begin
           suiDBGrid3.Canvas.FillRect(Rect);
           suiDBGrid3.Canvas.Brush.Color := Clgray;
           DrawFrameControl(suiDBGrid3.Canvas.Handle,Rect,DFC_BUTTON,CtrlState[Column.Field.AsBoolean]);
         End;
    end;procedure Tform1.suiDBGrid3KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);/////dbgrid的自带事件
    begin
      If (Key = VK_SPACE) and (suiDBGrid3.SelectedField.DataType = ftBoolean) Then
        begin
          TDrawGrid(suiDBGrid3).Col := 3;
          suiDBGrid3.SetFocus;
          Tform1.SaveBoolean();
        end;
    end;procedure  Tform1.SaveBoolean;//////自写程序
    Begin  suiDBGrid3.SelectedField.DataSet.Edit;  suiDBGrid3.SelectedField.AsBoolean := not suiDBGrid3.SelectedField.AsBoolean;  suiDBGrid3.SelectedField.DataSet.Post;End;
    //确保只有在逻辑字段才能这样插入组件
      

  2.   

    直接在數據表中加入一個bit字段不就可以了麼?