Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Leere Einträge in ListBox löschen


hube - Sa 05.04.08 09:17
Titel: Leere Einträge in ListBox löschen
Hallo zusammen

Ich habe folgendes Problem: Ich fülle eine ListBox wie folgt ab:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
begin
Listbox1.Items.Clear;
try
TempQuery.Close;
TempQuery.SQL.Clear;
TempQuery.SQL.Add('Select distinct Artikel from Artikel'); // die DB heisst "Artikel" und die Spalte heisst auch "Artikel"
TempQuery.Open;
while not TempQuery.Eof do
begin
ListBox1.Items.Add(TempQuery.Fields[0].AsString);
TempQuery.Next;
end;
ListBox1.ItemIndex := 0;
except
on EDatabaseError do
MessageDLG('Kann keine Artikel finden.', mtError, [mbOK], 0)
end;


Das funktioniert auch, aber das Problem ist, dass es mir bei der Augabe an erster Stelle eine leere Zeile anzeigt (in der DB kann es auch leere Einträge haben). Wenn ich jetzt mit:


Delphi-Quelltext
1:
ListBox1.Items.Delete(0);                    


die erste Zeile lösche, so zeigt es mir alles richtig an; ABER, wenn es in der DB keine leeren Einträge hat, so löscht es mir natürlich den ersten Eintrag. Und genau das möchte ich verhindern. Ich möchte, dass es mir den ersten Eintrag nur dann löscht wenn diese auch leer ist. Ich habe es auch so versucht:


Delphi-Quelltext
1:
ListBox1.Items.Delete(ListBox1.Items.IndexOf(''));                    


Doch das liefert nicht das gewünschte Ergebnis (= die leere Zeile ist immer noch da)

Hat jemand einen Tipp, was ich machen kann?

Besten Dank für Euere Hilfe
hube


Silas - Sa 05.04.08 09:27

Da sollte doch ein

Delphi-Quelltext
1:
if ListBox1.Items[0] = '' then ListBox1.Items.Delete(0);                    
genügen. Oder habe ich jetzt deine Frage falsch verstanden?

Es wäre allerdings besser, wenn du eine leere Zeile erst gar nicht hinzufügst:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var FieldValue: String;
...
while not TempQuery.Eof do
begin
FieldValue := TempQuery.Fields[0].AsString;
if FieldValue <> '' then ListBox1.Items.Add(FieldValue);
TempQuery.Next;
end;


hube - Sa 05.04.08 09:56

Hallo Silas

Besten Dank, es funktioniert.

hube