![]() |
Daten anzeigen in StringGrid und TEdit
Hallo,
auf einer Form habe ich unter ein StringGrid einige TEdits platziert. Zu einer markierten Adresse im Grid sollen darin weitere Informationen z.B. die Tel-Nr. angezeigt werden. Diese Daten stehen bereits in der DB. Folgender Code hat leider nicht funktioniert:
Delphi-Quellcode:
Vielen Dank für Hilfe!
procedure TDemoForm.FormShow(Sender: TObject);
begin EdTelefon.Text := QueryAdr.FieldByName('Telefon').AsString; end; Gruß Lombi |
Re: Daten anzeigen in StringGrid und TEdit
Das FormShow wird lediglich einmal aufgerufen. Und wohl sowieso zu früh. Baue die Zeile mal ins OnSelectCell des Grids rein.
|
Re: Daten anzeigen in StringGrid und TEdit
Zitat:
wenn Du die Daten aus der Datenbank in ein StringGrid holst kommst Du mit dem Query auch nicht einfach so weiter. Der Datensatz bleibt ja immer auf dem selben Datensatz der Tabelle stehen. |
Re: Daten anzeigen in StringGrid und TEdit
Delphi-Quellcode:
Guter Vorschlag!
procedure TDemoForm.StringGridSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean); begin QueryAdr.RecNo := StringGrid.Row; // Codezeile ergänzt! EdTelefon.Text := QueryAdr.FieldByName('Telefon').AsString; end; Eines stört aber: Im Grid muß ich jetzt auf eine markierte Zeile doppelt klicken, damit die passende Tel-Nr. im Edit erscheint. Wie bitte kann ich das abstellen? |
Re: Daten anzeigen in StringGrid und TEdit
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 ![]() 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; |
Re: Daten anzeigen in StringGrid und TEdit
Hallo Sharky,
mit Deinem Code kommt es leider zu einer 'Zugriffsverletzung'! |
Re: Daten anzeigen in StringGrid und TEdit
Zitat:
SCRaT |
Re: Daten anzeigen in StringGrid und TEdit
Zugriffsverletzung bei:
Delphi-Quellcode:
Statt dem Label verwende ich ein TEdit!
EdTelefon.Text := MyData.Telefonnummer; // Daten anzeigen
Wozu wird übrigens nachstehende Codezeile benötigt? Die Datensatz-ID muß nicht sichtbar gemacht werden.
Delphi-Quellcode:
Label2.Caption := format('Datensatz-ID %D', [MyData.ID]);
|
Re: Daten anzeigen in StringGrid und TEdit
Hallo Lombi,
setze einfach einen Haltepunkt auf die fragliche Zeile und inspiziere mal die Variable MyData. Wenn diese nil ist, dann hast du den Auslöser für die Zugriffsverletzung gefunden und kannst gezielt nach der Ursache forschen. Sharky konnte nicht wissen welche Felder du anzeigen möchtest und welche nicht. Lasse die Zeile mit der Zuweisung von ID an Label2 einfach weg. Freundliche Grüße |
Re: Daten anzeigen in StringGrid und TEdit
Zitat:
Delphi-Quellcode:
Diese Schreibweise ist besonders hilfreich wenn viele Variablen mittels '+' zu einem String zusammengeführt werden sollen. Hier ist die "format"-Schreibweise wesentlich kürzer. Im Internet (google) gibts einige Seiten, in denen der format-Befehl gut beschrieben ist. Sollte man sich mal zu Gemüte führen wenn man es öfters brauchen könnte!
Label2.Caption := 'Datensatz-ID ' + IntToStr(MyData.ID);
SCRaT |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz