Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - 2. Spalte auslesen in Listbox
hube - Mo 03.01.11 13:39
Titel: 2. Spalte auslesen in Listbox
Hallo zusammen
Ich habe folgendes Problem: Ich habe einen Table in welchem ich 2 Spalten mit Werten habe, die ich mit einem Mausklick in eine Listbox "weiterverarbeiten" will.
Der Table sieht etwa so aus:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Artikel WG_Artikel Badehose 3 Badekleid 3 Bademantel 3 Badeschuhe 1 Bikini 3 Bluse 3 Body 3 Buch 5 Finken 1 |
Zuerst befülle ich die Listbox wie folgt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TArtikel.FormShow(Sender: TObject); var FieldValue: String; begin Listbox1.Items.Clear; try TempQuery.Close; TempQuery.SQL.Clear; TempQuery.SQL.Add('Select Artikel, WG_Artikel from ARTIKEL GROUP BY ARTIKEL, WG_Artikel'); TempQuery.Open; while not TempQuery.Eof do begin FieldValue := TempQuery.Fields[0].AsString; if FieldValue <> '' then ListBox1.Items.Add(FieldValue); TempQuery.Next; end; ListBox1.ItemIndex := 0;
except on EDatabaseError do MessageDLG('Kann keine Artikel finden.', mtError, [mbOK], 0) end; |
Damit befüllt es mir die Listbox wie gewünscht mit allen "Artikel". Wenn ich nun einen Wert (Artikel) aus der Listbox (mit einem Doppelklick) auswählen will, dann mache ich dies so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TArtikel.ListBox1DblClick(Sender: TObject); var i : integer; FieldValue : string; begin for i:=0 to ListBox1.Items.Count-1 do if ListBox1.Selected[i] then begin Edit1.Text := ListBox1.Items[i]; end; end; |
Und dann zeigt es mir den mit einem Doppelklick ausgewähleten Wert im Edit1.Text an. Soweit funktioniert alles wunderbar. Das Problem ist nun, ich möchte in einem "Edit2.Text" den 2. Wert "WG_Artikel" (welcher in der Listbox1 zwar nicht sichtbar ist, jedoch trotzdem ausgewählt ist) anzeigen lassen.
Hat jemand eine Ahnung wie ich das machen kann?
Besten Dank für jede Hilfe.
Liebe Grüsse, Markus
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
Delete - Mo 03.01.11 13:58
Eine Listbox hat nur eine Spalte. Ein Listview wäre wohl das geeignetere Steuerelement für dich.
Und die Schleife ist auch überflüssig:
Delphi-Quelltext
1: 2:
| if Listbox1.Items.Count > 1 then Edit1.Text := Listbox1.Selected[ListBox1.ItemIndex]; |
zuma - Mo 03.01.11 16:58
wenn dir Luckie's Vorschlag (andere Komponente statt Listbox benutzen) nicht so gefällt, bleibt nur noch, das du bei Auswahl eines Listboxeintrages im Hintergrund in den Query gehst und dir dort die Info herholst, also zb. per Locate in etwa so
Delphi-Quelltext
1: 2: 3: 4:
| if TempQuery.Locate('Artikel', Listbox1.Selected[ListBox1.ItemIndex], []) then Edit2.Text := lQueryTemp.FieldByName(WG_Artikel).asstring else Edit2.Text := ''; |
ist aber unsauber, da die Synchronisation der Listbox/Query-Daten von dir ge(währ)leistet werden muss.
Bergmann89 - Mo 03.01.11 17:02
Hey,
alternativ könntest du die Daten auch mit mehreren Records in einer Liste organisieren.
MfG Bergmann.
LSanchez - Di 04.01.11 10:13
oder verwende
Delphi-Quelltext
1:
| ListBox1.Items.AddObject(FieldValue, WG_ArtikelObject); |
WG_ArtikelObject ist von Typ TWG_ArtikelObject und enthält den 2. Wert.
Delphi-Quelltext
1: 2: 3:
| TWG_ArtikelObject = class PrimaryKey: String; end; |
Gruß
Luis Sanchez
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!