AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listbox zweiten Wert pro Eintrag hinterlegen

Ein Thema von seppelon · begonnen am 1. Mär 2009 · letzter Beitrag vom 1. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
seppelon

Registriert seit: 19. Okt 2008
6 Beiträge
 
#1

Listbox zweiten Wert pro Eintrag hinterlegen

  Alt 1. Mär 2009, 13:10
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:
For i := 1 to Form1.FResult.RowsCount do
begin
Listbox1.Items.Add(Form1.FResult.FieldValueByName('name'));
Form1.FResult.Next;
end;
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.
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.
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.

Items.AddObject('Name=Wert',Pointer(43) 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?

Vielen Dank für eure Hilfe
ein Delphi-N00b
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Listbox zweiten Wert pro Eintrag hinterlegen

  Alt 1. Mär 2009, 13:19
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#3

Re: Listbox zweiten Wert pro Eintrag hinterlegen

  Alt 1. Mär 2009, 13:28
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:
ListBox.Items.AddObject(Datensatz.Stringfeld, Pointer(Datensatz.ID)); Um die hinterlegte ID wieder auszulesen, geht man den umgekehrten Weg:
ID := integer(ListBox.Items.Objects[ListBox.ItemIndex]); Mit dieser ID kann man dann eine Query befüllen und sich die Daten holen. Die Beispiele sind nicht getestet, daher keine Garantie
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Listbox zweiten Wert pro Eintrag hinterlegen

  Alt 1. Mär 2009, 13:37
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).
  Mit Zitat antworten Zitat
seppelon

Registriert seit: 19. Okt 2008
6 Beiträge
 
#5

Re: Listbox zweiten Wert pro Eintrag hinterlegen

  Alt 1. Mär 2009, 13:41
Das ist ja total cool - funktioniert soweit astrein
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Listbox zweiten Wert pro Eintrag hinterlegen

  Alt 1. Mär 2009, 13:49
Zitat von seppelon:
Das ist ja total pornomäßig
Ich würde dich bitten solche Ausdrücke in Zukunft zu unterlassen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#7

Re: Listbox zweiten Wert pro Eintrag hinterlegen

  Alt 1. Mär 2009, 14:10
Zitat von seppelon:
Mal so rein aus Interesse, wäre es auch möglich noch mehr Werte zu hinterlegen bzw. z. B. Strings zu hinterlegen?
Wenn Du die in eine Klasse packst, kannst Du die Objektreferenz dieser Klasse hinterlegen (das ist ja auch der ursprüngliche Sinn des Ganzen). Zum Zugriff musst Du dann nur gegen diese Klasse casten.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
seppelon

Registriert seit: 19. Okt 2008
6 Beiträge
 
#8

Re: Listbox zweiten Wert pro Eintrag hinterlegen

  Alt 1. Mär 2009, 14:18
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
Seppl




PS:
Zitat von Luckie:
Ich würde ich bitten solche Ausdrücke in Zukunft zu unterlassen.
Werd ich in Zukunft beachten - der Kommentar war in der Tat etwas unüberlegt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Listbox zweiten Wert pro Eintrag hinterlegen

  Alt 1. Mär 2009, 14:25
Guck mal hier: http://www.delphipraxis.net/internal...476&highlight= da habe ich so was gemacht. Die Objekte befinden sich alle einer Liste. Bim füllen der Listbox, werden die Zeiger auf die Objekte an jeden Eintrag gehangen. Entscheidet sich die Methoden FillListbox in der Unit Main.pas und die Methode zum Selberzeichnen der Listbox in der entsprechenden Unit.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#10

Re: Listbox zweiten Wert pro Eintrag hinterlegen

  Alt 1. Mär 2009, 22:43
Zitat von seppelon:
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?
Hallo,

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz