抱歉,关于你的问题我现在才看见
//参考
type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    Table1: TTable;
    DataSource1: TDataSource;
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure DBGrid1CellClick(Column: TColumn);
  private
    { Private declarations }
    FStringList: TStringList;
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  J: Integer;
  S: string;
begin
  S := Format('%d,%d',
    [Column.Index, TDBGrid(Sender).DataSource.DataSet.RecNo]);
  J := FStringList.IndexOf(S);
  if J >= 0 then begin
    TDBGrid(Sender).Canvas.Brush.Color := clSkyBlue;
    TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
  FStringList := TStringList.Create;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
  FStringList.Free;
end;procedure TForm1.DBGrid1CellClick(Column: TColumn);
var
  J: Integer;
  S: string;
begin
  S := Format('%d,%d',
    [Column.Grid.SelectedIndex, Column.Grid.DataSource.DataSet.RecNo]);
  J := FStringList.IndexOf(S);
  if J >= 0 then
    FStringList.Delete(J)
  else FStringList.Add(S);
  Column.Grid.Refresh;
end;end.