Einzelnen Beitrag anzeigen

e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
163 Beiträge
 
Delphi 6 Enterprise
 
#1

ListItem ein- und ausblenden

  Alt 5. Feb 2014, 10:33
Hallo!

Ich stehe vor einem ähnlichen Problem wie bei dem Thema TAdvListView oder TListview Inhalt filtern, wollte aber alten Thread nicht wieder aufleben lassen...

Über eine Abfrage auf einer MS Access-Datenbank wird ein ListView gefüllt. Der Inhalt dieses ListView soll nun über eine Eingabemaske (ein TEdit) gefiltert werden können. Wird also z. B. ein 'k' eingetippt, sollen nur noch ListItems zu sehen sein, die in Caption ein 'k' oder 'K' haben. Löscht man das 'k' wieder aus dem Edit sollen auch wieder alle Einträge in der ListView sichtbar sein.
Natürlich würde sich da eine entsprechend modifizierte Abfrage der Datenbank geradezu anbieten, nur leider ist die Sache dann (bei großer Anzahl Datensätze) viel zu langsam. Denn zuerst muss der Inhalt des ListViews komplett gelöscht werden, die Abfrage ausgeführt und übertragen und anschließend der Inhalt wieder in den ListView geschrieben werden, wobei die Abfrage (da aus vielen Tabellen erstellt) den größten zeitlichen Aufwand hält.

Da eine Änderung der Datenbank (zumindest momentan) keine Option ist, spiele ich mit dem Gedanken den ListView zum Filtern zu Missbrauchen. Mein Versuch mit CustomDrawItem die Zeilen zu beeinflussen hat allerdings nicht den erwarteten Effekt:
Delphi-Quellcode:
procedure TForm.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  DefaultDraw:= (Edit1.Text='') or (Pos(Edit1.Text,Item.Caption)>0);
end;
Zwar geht es recht schnell, doch hinterlassen die ausgeblendeten Zeilen Platz, sodass Lücken im ListView entstehen statt einer gekürzten Liste.

Was mache ich falsch? Oder kennst jemand eine bessere Lösung ListItems auszublenden?

Gruß
e-gon
  Mit Zitat antworten Zitat