1. Query1虛擬兩個欄位: APPROVE, REJECT 即: Query1.SQL.Text := 'select 'F' APPROVE, 'F' REJECT,A. * from pdm038m a'; 2. 設置DBGrid1.Options.dgEditing為False; 3. procedure TForm1.DBGrid1DrawColumnCell(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 (Column.FieldName = 'APPROVE') or (Column.FieldName = 'REJECT') then begin DrawRect := Rect; DrawRect.Top := DrawRect.Top + 1; DrawRect.Bottom := Rect.Bottom - 1; DrawState := ISChecked[Column.Field.AsBoolean]; TDBGrid(Sender).Canvas.FillRect(Rect); DrawFrameControl(TDBGrid(Sender).Canvas.Handle, DrawRect, DFC_BUTTON, DrawState); end; end; 4. procedure TForm1.DBGrid1CellClick(Column: TColumn); begin if (DBGrid1.SelectedIndex = 0) or (DBGrid1.SelectedIndex = 1) then begin Query1.Edit; DBGrid1.SelectedField.AsBoolean := not DBGrid1.SelectedField.AsBoolean; if (Column.Field.FieldName = 'APPROVE') and Column.Field.DataSet.FieldByName('APPROVE').AsBoolean then Query1.FieldByName('REJECT').AsBoolean := False else if Column.Field.DataSet.FieldByName('REJECT').AsBoolean then Query1.FieldByName('APPROVE').AsBoolean := False; end; end;