Hai LOMBI,
dieses Verfahren hat einen großen Nachteil. Wenn Du die Daten im StringGrid umsortierst stimmen die Nummern der Zeilen nicht mehr mit den RecNo der Datensätze überein.
Ich speichere mir Zusatzinfos immer in der
Objects Eigenschaft.
Hier einmal ein Beispiel:
Delphi-Quellcode:
type
TExtraData = class(TObject)
FID: Integer;
FTelefon: string;
public
property ID: Integer read FID write FID;
property Telefonnummer: string read FTelefon write FTelefon;
end;
procedure TDemo_Form.FormCreate(Sender: TObject);
var
MyData: TExtraData;
ndx: Integer;
begin
for ndx := StringGrid1.FixedRows to StringGrid1.RowCount do
begin
MyData := TExtraData.Create; // Objekt erzeugen
MyData.ID := ndx; // Objekt mit Daten füllen
MyData.Telefonnummer := Format('Telefonnummer %d', [ndx]);
StringGrid1.Cells[1, ndx] := Format('Zeile %d', [ndx]);
StringGrid1.Objects[0, ndx] := MyData; // Das Objekt an eine Zeile des SG binden
end;
end;
procedure TDemo_Form.FormDestroy(Sender: TObject);
var
ndx: Integer;
begin
// Beim beenden des Programmes den Speicher für die Objekte freigeben
for ndx := StringGrid1.FixedRows to StringGrid1.RowCount do
begin
if Assigned(StringGrid1.Objects[0, ndx]) then
begin
StringGrid1.Objects[0, ndx].Free;
end;
end;
end;
procedure TDemo_Form.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
var
MyData: TExtraData;
begin
MyData := Pointer((Sender as TStringGrid).Objects[0, ARow]); // Objekt der Zeile auslesen
Label1.Caption := MyData.Telefonnummer; // Daten anzeigen
Label2.Caption := format('Datensatz-ID %D', [MyData.ID]);
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"