Eine Antwort für mich falls ich wieder einmal danach suchen sollte oder auch für weitere interessierte.
So wie es aussieht gibt ein keine integrierte Lösung.
Nach dem Beispiel "DBAdvGrid ADOSelection sample" funktioniert es so:
In das DBAdvGrid ein neues Feld über Columns anlegen. Das neue Feld bekommt als Property Editor=edDataCheckBox zugewiesen.
Nach jedem checken soll die komplette row farbig markiert werden. Dafür muss das Grid neu gezeichnet werden.
Delphi-Quellcode:
procedure TfrmAdressen.grAdressenCheckBoxClick(Sender: TObject; ACol,
ARow: Integer; State: Boolean);
begin
inherited;
grAdressen.RepaintRow(ARow);
end;
Die row einfärben:
Delphi-Quellcode:
procedure TfrmAdressen.grAdressenGetCellColor(Sender: TObject; ARow,
ACol: Integer; AState: TGridDrawState; ABrush: TBrush; AFont: TFont);
var
state: boolean;
begin
if grAdressen.GetCheckBoxState(1,ARow,state) then
begin
if state then
begin
ABrush.Color := clRed;
AFont.Color := clWhite;
AFont.Style := [fsBold];
end
else
begin
ABrush.Color := clWindow;
AFont.Color := clWindowText;
AFont.Style := [];
end;
end;
end;
Um nun auf alle markierte rows schnell zugreifen zu können:
Delphi-Quellcode:
procedure TfrmAdressen.Button1Click(Sender: TObject);
var
i,j: integer;
state: boolean;
bookmark:string;
begin
ListBox1.Items.Clear;
grAdressen.BeginUpdate;
qrAdressen.DisableControls;
j := 0;
qrAdressen.First;
for i := 1 to grAdressen.RowCount - 1 do
begin
if grAdressen.GetCheckBoxState(1,i,state) then
begin
if state then
begin
qrAdressen.MoveBy(i - 1 - j);
listbox1.items.Add(qrAdressen.FieldByName('ADRESSID').AsString + ' : '+ qrAdressen.FieldByName('vornamen').AsString);
j := i - 1;
end;
end;
end;
qrAdressen.EnableControls;
grAdressen.EndUpdate;
end;
Über diesen Weg können beliebige Rows markiert werden ohne die Strg Taste und ohne Verlust der Selektion
beim scrollen. Was nicht geht, wie in meiner Beschreibung zu oberst, die selection zu
behalten bei einer Änderung der Where Bedingung. In diesem Fall muss das Ergebnis zwischengespeichert werden.
Gruß Kostas