Entwickler-Ecke
Dateizugriff - ValueListEditor filtern
LittleBen - Sa 18.12.10 18:05
Titel: ValueListEditor filtern
Hallo,
ich bin gerade an einem Projekt, bei dem ich die TValueListEditor-Komponente benutze.
Ich füge in die Liste 10 Rows (z.B eine Verwaltung von irgendwelchen Leuten):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| ValueListEditor1.InsertRow('Franz', 'Müller', true); ValueListEditor1.InsertRow('Franz', 'Müller', true); ValueListEditor1.InsertRow('Heinz', 'Beck', true); ValueListEditor1.InsertRow('Lisa', 'Franke', true); ValueListEditor1.InsertRow('Heike', 'Müller', true); ValueListEditor1.InsertRow('Isabell', 'Jakubik', true); ValueListEditor1.InsertRow('Julia', 'Meier', true); ValueListEditor1.InsertRow('Max', 'Müller', true); ValueListEditor1.InsertRow('Paul', 'Meier', true); ValueListEditor1.InsertRow('Louise', 'Meier', true); |
Gut! Nun möchte ich alle Leute deren Nachnamen Müller sind aufgelistet haben und alle deren Nachnamen Meier sind, wie geht das?
Ich hoffe ihr könnt mir helfen!!!
Grüße,
Benny
jaenicke - Sa 18.12.10 18:16
Das klingt nach dem typischen Fehler, dass du die Datenhaltung mit der Anzeige auf der Oberfläche verwechselst. Der ValueListEditor ist zur Anzeige der anzuzeigenden Daten da. Nicht aber zum Halten der gerade nicht angezeigten Daten.
Füge aus deinen internen Daten einfach nur die Zeilen hinzu, die du auch haben möchtest.
Tranx - Sa 18.12.10 19:51
Am Besten speicherst Du die zu durchsuchenden Daten in einer Stringliste. Dann gibst Du in zwei Editfeldern die zu suchenden Nachnamen ein und anschließend durchsuchst Du die Stringliste nach dem Nachnamen und speicherst jede gefundende Zeile in deinen ValuelistEditor.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55:
| var Namen : TStringList;
procedure LadeNamen; begin Namen := TStringList.Create; Namen.LoadFromFile('C:\TEMP\TEST.TXT'); end;
procedure EditFeld1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of VK_RETURN : begin EditFeld2.SetFocus; Key := 0; end; end; end;
procedure EditFeld2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of VK_RETURN : begin SucheNamen(EditFeld1.Text, TRUE); SucheNamen(EditFeld2.Text, FALSE); Key := 0; end; end; end;
procedure SucheNamen(const welcher : string; const ListeLoeschern : boolean); var i : integer; p : integer; begin if Trim(welcher)='' then Exit; if ListeLoeschen then ValuelistEditor1.Clear; for i := 0 to Namen.Count do begin p := Pos(' '+welcher,Namen[i]); if p>0 then begin ValuelistEditor1.InsertRow(Trim(Copy(Namen[i],1,p)),Trim(Copy(Namen[i],p+1,255)), TRUE); end; end; end; |
P.S. dies habe ich ohne Test der Prozeduren im Beitrag geschrieben. Bitte versuche es bei Dir. Für Fehlerfreiheit kann ich nicht garantieren.
Die Namen gibst Du in die beiden Editfelder ein. Mit Enter verlässt Du die Eignabe und beim ersten Editfeld wird das 2. aufgerufen, beim 2., Editfeld die Suche gestartet.
Die Komponenten TValuelistEditor habe ich in meiner Delphi-Version nicht.
jaenicke - Sa 18.12.10 19:59
Tranx hat folgendes geschrieben : |
| Am Besten speicherst Du die zu durchsuchenden Daten in einer Stringliste. |
Geht irgendwie, aber am besten in einer geeigneten Datenstruktur. Zum Beispiel in einer eigenen Klasse für die Daten.
Tranx hat folgendes geschrieben : |
| Die Komponenten TValuelistEditor habe ich in meiner Delphi-Version nicht. |
Das gibt es ab Delphi 7.
Tranx - Sa 18.12.10 20:02
Das ist klar. Das ist dann noch einfacher. Aber wenn man irgendwelche Textdateien zur Verarbeitung hat, ist das einfacher mit TStringlist.
Bei derartigen Aufgaben ist das kaum aufwändig, wie mein Code zeigt.
Was macht TValuelistEditor eigentlich? Außer Daten zeigen?
jaenicke - Sa 18.12.10 20:15
Tranx hat folgendes geschrieben : |
| Was macht TValuelistEditor eigentlich? Außer Daten zeigen? |
Es ist wie ein einfacher Objektinspektor. Leider kein sonderlich guter, besser ist TJvInspector von den JEDIs.
LittleBen - So 19.12.10 02:36
Hat geklappt! Danke an euch.
Doch nun bin ich auf ein neues "Problem" gestoßen.
Also ich habe jetzt ein String hinzugefügt mit:
Delphi-Quelltext
1:
| ValueListEditor1.InsertRow('Hans','Otto',true); |
Und nun möchte ich die LINKE Seite ändern...hab eigentlich schon alles ausprobiert und bin zu keinem Ergebnis gekommen.
Habt ihr eine Lösung?
Glaub ich sollte doch die Komponente von JEDIs runterladen.
Grüße,
Benny
jaenicke - So 19.12.10 03:00
Wie wäre es mit Keys?
LittleBen - Mo 20.12.10 18:17
Boar geil!! Danke!!!
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!