Az
említett
honlapon TBookmarkList objektumot illesztenek a DBGrid-hez RecList néven. Én is úgy tapasztalom, hogy ez önmagában nem alkalmas arra, hogy meg lehessen tudni, hogy pontosan mely sorok lettek kijelölve a DBGrid-ben, legfeljebb annyit lehet megtudni belőle, hogy hány darab pipa lett kiosztva (RecList.Count) összesen.
A RecList és vele együtt a TBookmarkList használata helyett egy olyan ötletem volna, hogy lehetne készíteni egy boolean array-t, ami majd tartalmazza, hogy melyik checkbox milyen állapotú, és könnyű is lekérdezni az állapotát. A linkelt honlapon szereplő példát így írnám át:
var BooleanArray: array of boolean
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
begin
SQLQuery.Last;
SetLength(BooleanArray, SQLQuery.RecordCount); // hogy pontos legyen a RecordCount értéke
SQLQuery.First;
for i := 0 to Length(BooleanArray) - 1 do BooleanArray[i] := False;
end;
procedure TForm1.DBGridCellClick(Column: TColumn);
begin
if Column.Index = 0 then BooleanArray[DBGrid.DataSource.DataSet.RecNo] := not BooleanArray[DBGrid.DataSource.DataSet.RecNo];
end;
procedure TForm1.DBGridUserCheckboxState(Sender: TObject; Column: TColumn; var AState: TCheckboxState);
begin
if BooleanArray[TDBGrid(Sender).DataSource.DataSet.RecNo] = True then AState := cbChecked else AState := cbUnChecked;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
SetLength(BooleanArray, 0);
end;