Autor Beitrag
hube
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38

WIN XP
D7 Prof
BeitragVerfasst: Mo 03.01.11 13:39 
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:
ausblenden 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:
ausblenden 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:

ausblenden 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 user profile iconNarses: Code- durch Delphi-Tags ersetzt
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
if Listbox1.Items.Count > 1 then
  Edit1.Text := Listbox1.Selected[ListBox1.ItemIndex];
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: 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

ausblenden 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.

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mo 03.01.11 17:02 
Hey,

alternativ könntest du die Daten auch mit mehreren Records in einer Liste organisieren.

MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
LSanchez
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26
Erhaltene Danke: 8



BeitragVerfasst: Di 04.01.11 10:13 
oder verwende
ausblenden Delphi-Quelltext
1:
ListBox1.Items.AddObject(FieldValue, WG_ArtikelObject);					


WG_ArtikelObject ist von Typ TWG_ArtikelObject und enthält den 2. Wert.

ausblenden Delphi-Quelltext
1:
2:
3:
TWG_ArtikelObject = class
    PrimaryKey: String;
end;


Gruß

Luis Sanchez