怎样在DBGrid中把布尔值显示为复选框啊?

解决方案 »

  1.   

    http://delphi.about.com/library/weekly/aa082003a.htmprocedure TForm1.FormCreate(Sender: TObject);
    begin
     DBCheckBox1.DataSource := DataSource1;
     DBCheckBox1.DataField  := 'Winner';
     DBCheckBox1.Visible    := False;
     DBCheckBox1.Color      := DBGrid1.Color;
     DBCheckBox1.Caption    := '';
     
     //explained later in the article
     DBCheckBox1.ValueChecked := 'Yes a Winner!'; 
     DBCheckBox1.ValueUnChecked := 'Not this time.'; 
    end;  Sender: TObject; const Rect: TRect; DataCol: 
      Integer; Column: TColumn; State: TGridDrawState);
      
    const IsChecked : array[Boolean] of Integer = 
          (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
    var
      DrawState: Integer;
      DrawRect: TRect;
    begin
      if (gdFocused in State) then
      begin
        if (Column.Field.FieldName = DBCheckBox1.DataField) then
        begin
         DBCheckBox1.Left := Rect.Left + DBGrid1.Left + 2;
         DBCheckBox1.Top := Rect.Top + DBGrid1.top + 2;
         DBCheckBox1.Width := Rect.Right - Rect.Left;
         DBCheckBox1.Height := Rect.Bottom - Rect.Top;     DBCheckBox1.Visible := True;
        end
      end
      else
      begin
        if (Column.Field.FieldName = DBCheckBox1.DataField) then
        begin
          DrawRect:=Rect;
          InflateRect(DrawRect,-1,-1);      DrawState := ISChecked[Column.Field.AsBoolean];      DBGrid1.Canvas.FillRect(Rect);
          DrawFrameControl(DBGrid1.Canvas.Handle, DrawRect, 
                           DFC_BUTTON, DrawState);
        end;
      end; 
    end;procedure TForm1.DBGrid1ColExit(Sender: TObject);
    begin
      if DBGrid1.SelectedField.FieldName = DBCheckBox1.DataField then 
        DBCheckBox1.Visible := False
    end;
      

  2.   

    procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
    begin
      if (key = Chr(9)) then Exit;  if (DBGrid1.SelectedField.FieldName = DBCheckBox1.DataField) then
      begin
        DBCheckBox1.SetFocus;
        SendMessage(DBCheckBox1.Handle, WM_Char, word(Key), 0);
      end;
    end;procedure TForm1.DBCheckBox1Click(Sender: TObject);
    begin
      if DBCheckBox1.Checked then
         DBCheckBox1.Caption := DBCheckBox1.ValueChecked
      else
         DBCheckBox1.Caption := DBCheckBox1.ValueUnChecked;
    end;