![]() |
Listbox zweiten Wert pro Eintrag hinterlegen
Moin moin,
ich hätte da mal gerne ein Problem. Ich hab bisher nur etwas Kleinkram mit Delphi programmiert und scheitere jetzt an einer wahrscheinlich simplen Problemstellung. Meine Listbox soll mehrere Einträge bekommen, diese repräsentieren jeweils einen Datensatz aus einer MySQL-Tabelle - soweit noch kein Problem. Ich verwende folgende Schleife um die Datensätze nach einander in die Listbox zu schreiben:
Delphi-Quellcode:
Jetzt wird mir für jeden Datensatz ein Eintrag in der Listbox angezeigt. Ich möchte nun durch Doppelklicken auf einen Eintrag ein Formular öffnen, in dem ich weitere Parameter des Datensatzen editieren kann, also ihn verändern kann.
For i := 1 to Form1.FResult.RowsCount do
begin Listbox1.Items.Add(Form1.FResult.FieldValueByName('name')); Form1.FResult.Next; end; Dazu müsste ich mit einer erneuten SQL-Query die restlichen Parameter des Datensatzes nachladen. Jetzt komme ich zum eigentlichen Problem: Es kann zwei oder mehr Datensätze geben die im Feld 'name', dem in der Listbox angezeigten, identische Werte enthalten. Also würde ich nun zusätzlich zum angezeigten Text noch den primary Key des Datensatzes in der Listbox hinterlegen wollen - natürlich nicht sichtbar. Aaaaber wie geht das? Nach dem ich schon diverse Beiträge zu ähnlichen Problemen gelesen habe bin ich nun langsam am Ende. Da wird von eigenen Klassen definieren gesprochen und von Objekten hinzufügen und von weiß ich was noch allem. :stupid: Für mich sah jetzt die Prozedur Listbox.Items.AddObject nach dem aus was ich brauche(?!). Allerdings hat mir weder die Delphi-Hilfe noch irgendein Forenbeitrag wirklich vermitteln können wie ich das ganze verwende.
Delphi-Quellcode:
Das habe ich mal in einem Beitrag gefunden - werde ich leider auch nicht besonders schlau draus. Instinktiv würde ich da jetzt als Wert den anzuzeigenden String übergeben. Aber was hat es mit Pointer(43) auf sich? Kann ich da meinen primary Key (int) übergeben? Wie greif ich auf den Wert später wieder zu? :drunken:
Items.AddObject('Name=Wert',Pointer(43)
Vielen Dank für eure Hilfe ein Delphi-N00b |
Re: Listbox zweiten Wert pro Eintrag hinterlegen
Also denke das es bei dem Lösungsansatz um andere Listen, als TStrings geht. TreeView Items z.B. haben ein Datenfeld, dem man z.B. ein Integer als gecasteten Pointer untermogeln kann.
In Deinen Fall kämen mir folgende Ideen: anderen Datencontainer (ListView oder StringGrid mit ausgeblendeten Spalten) oder eine paralell mit geführte Liste (TstringList). Letzteres wird kompliziert, wenn ListBox sortiert wird. |
Re: Listbox zweiten Wert pro Eintrag hinterlegen
Nein, das geht auch mit TStrings. Da eine Objektreferenz ja auch nur ein Zeiger ist, welcher wiederum aus einer ganzen Zahl besteht, kann man durch den gezeigten Cast auch Zahlen (also den Primärschlüssel, wenn numerisch) hinterlegen.
Pseudocode:
Delphi-Quellcode:
Um die hinterlegte ID wieder auszulesen, geht man den umgekehrten Weg:
ListBox.Items.AddObject(Datensatz.Stringfeld, Pointer(Datensatz.ID));
Delphi-Quellcode:
Mit dieser ID kann man dann eine Query befüllen und sich die Daten holen. Die Beispiele sind nicht getestet, daher keine Garantie ;)
ID := integer(ListBox.Items.Objects[ListBox.ItemIndex]);
|
Re: Listbox zweiten Wert pro Eintrag hinterlegen
Ja warum umständlich, wenn es auch einfach geht. Dabei hatte ich sogar eben noch schnell geschaut, ob TStrings eine Objektliste mitführt (und die völlig übersehen). :oops:
|
Re: Listbox zweiten Wert pro Eintrag hinterlegen
Das ist ja total cool - funktioniert soweit astrein :thumb:
Mal so rein aus Interesse, wäre es auch möglich noch mehr Werte zu hinterlegen bzw. z. B. Strings zu hinterlegen? Danke liebe Delphi-Pro's :cheer: |
Re: Listbox zweiten Wert pro Eintrag hinterlegen
Zitat:
|
Re: Listbox zweiten Wert pro Eintrag hinterlegen
Zitat:
|
Re: Listbox zweiten Wert pro Eintrag hinterlegen
Ok, dann werd ich mich mal mit Klassen und Objektreferenzen auseinander setzen.
Wer weiß wann man das mal gebrauchen kann. Danke an alle die geholfen haben :cheers: Seppl PS: Zitat:
|
Re: Listbox zweiten Wert pro Eintrag hinterlegen
Guck mal hier:
![]() |
Re: Listbox zweiten Wert pro Eintrag hinterlegen
Zitat:
es gibt auch noch eine viel einfachere und sprachunabhängige Methode: man hängt ein TAB und den primary key an den Listbox-Eintrag dran, und dann macht man die Tabposition so weit rechts, dass der primary key niemals sichtbar wird. Gruss Reinhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 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