procedure TForm13.DBGrid1CellClick(Column: TColumn); begin if (Column.Field.FieldName = 'aboolean') then begin DBGrid1.SelectedField.DataSet.Edit; if DBGrid1.SelectedField.AsInteger = 0 then DBGrid1.SelectedField.AsInteger := 1 else if DBGrid1.SelectedField.AsInteger = 1 then DBGrid1.SelectedField.AsInteger := 0; DBGrid1.SelectedField.DataSet.Post; end; end; //========================================================================= procedure TForm13.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); // CheckBox1 列 要用到的 begin if (Column.Field.FieldName = 'aboolean') then with CheckBox1 do begin DBGrid1.Canvas.FillRect(Rect); if Column.Field.AsInteger = 0 then drawframecontrol(DBGrid1.Canvas.Handle, Rect, dfc_button, CtrlState[False]) else drawframecontrol(DBGrid1.Canvas.Handle, Rect, dfc_button, CtrlState[True]); end; end; //============================================================================== procedure TForm13.FormCreate(Sender: TObject); DBGrid1.Options:= DBGrid1.Options-[ dgEditing]; //CheckBox1 不要 双击后,出现 0的Edit显示 end; //============================================================================== procedure TForm13.DBGrid1TitleClick(Column: TColumn); //CheckBox1专用 var i: Integer; begin if (Column.Field.FieldName = 'aboolean') then begin FDQuery1.First; // 游标回滚 DBGrid1.SelectedRows.CurrentRowSelected := True; // 第一行被选中 if trim(Column.Title.Caption) = '全选' then begin for i := 0 to DBGrid1.DataSource.DataSet.RecordCount - 1 do begin DBGrid1.Fields[3].DataSet.Edit; //3为 ChechBox1所在的列序号 DBGrid1.Fields[3].AsInteger := 1; DBGrid1.Fields[3].DataSet.Post; DBGrid1.DataSource.DataSet.next; end; Column.Title.Caption := '全消'; end else begin for i := 0 to DBGrid1.DataSource.DataSet.RecordCount - 1 do begin DBGrid1.Fields[3].DataSet.Edit; DBGrid1.Fields[3].AsInteger := 0; DBGrid1.Fields[3].DataSet.Post; DBGrid1.DataSource.DataSet.next; end; Column.Title.Caption := '全选'; end; FDQuery1.First; // 游标回滚 DBGrid1.SelectedRows.CurrentRowSelected := True; // 选中第一行 end; end;