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 in der Form  'Vorname Nachname ' in einer Textdatei C:\TEMP\TEST.TXT gespeichert
  Namen := TStringList.Create;
  Namen.LoadFromFile('C:\TEMP\TEST.TXT');
end;

// dies ist die OnKeyProzedur der Editfelder

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 : stringconst ListeLoeschern : boolean);
var
  i : integer;
  p : integer;
begin
  if Trim(welcher)='' then 
    Exit;
  if ListeLoeschen then 
    ValuelistEditor1.Clear;  // nehme an, dass damit die Liste entleert wird
  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

user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
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

user profile iconTranx hat folgendes geschrieben Zum zitierten Posting springen:
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!!!