Guten Tag liebe Leser,
ich hab im Augenblick ein Problem bezüglich meines Viewerfilters auf einer Table.
Und zwar habe ich für die Tabelle ein Textfeld, dass auf bestimmte Eingaben wartet.
so sollen z.B: Spaltennamen mit einem hinterhergeschobenen = zu der filterung der Spalte mit dem Wort führen. z.B. filtert spalte1=test die Spalte1 nach dem Wort test. Das funktioniert soweit auch. Ich habe in dem Viewerfilter die select Methode überschrieben und nach jeder Eingabe im Textfeld, also nach jedem Buchstaben, prüfe ich ab ob der Inhalt in der jeweiligen Spalte vorhanden ist und refreshe meinen Tableviewer.
Das Problem hierbei ist, dass ich eben nicht immer nur nach einem Wort filtern will. Es sollen auch Filter im Sinne von spalte1=test,test2 möglich sein. Und genau da versage ich. Sobald der Benutzer das Komma eingegeben hat und damit die Tabelle zum Teil schon gefilert wird ist die zweite Eingabe nur ein Zusatzfilter für die schon heruntergebrochene Tabelle. Das heisst eigentlich sollen in dem Beispiel alle Reihen angezeigt werden, die entweder test oder test2 als Daten führen. Da ich aber nach jedem Buchstaben alles durchprüfe führt es dazu, dass er erst komplett nach test filtert und danach erst nach test2...
Ich hoffe ich habe mich da verständlich ausgedrückt.
Zur Erläuterung nochmal ein genaueres Beispiel.
||column1 ||
||row1||data1 ||
||row2||data2 ||
Eingabe Filtertext: column1=data1
erwartete Ausgabe: data1
Ausgabe: data1
Eingabe Filtertext: column1=data1,data2
erwartete Ausgabe data1,data2
Ausgabe: keine Ausgabe, da zuerst nach data1 gefiltert und danach erst nach data2
Also ich hab hier mal versucht die wichtigsten Dinge meiner Methode rauszuextrahieren. Kann sein, dass ein paar Teile hier nun falsch sind, aber mir gehts eigentlich nur um den Grundgedanken.
Vielleicht hab ich ja auch einfach nur einen Hänger, aber vielleicht hat ja hier jemand schonmal ein ähnliches Problem gehabt.
Über Hilfe würde ich mich unheimlich freuen!
ich hab im Augenblick ein Problem bezüglich meines Viewerfilters auf einer Table.
Und zwar habe ich für die Tabelle ein Textfeld, dass auf bestimmte Eingaben wartet.
so sollen z.B: Spaltennamen mit einem hinterhergeschobenen = zu der filterung der Spalte mit dem Wort führen. z.B. filtert spalte1=test die Spalte1 nach dem Wort test. Das funktioniert soweit auch. Ich habe in dem Viewerfilter die select Methode überschrieben und nach jeder Eingabe im Textfeld, also nach jedem Buchstaben, prüfe ich ab ob der Inhalt in der jeweiligen Spalte vorhanden ist und refreshe meinen Tableviewer.
Das Problem hierbei ist, dass ich eben nicht immer nur nach einem Wort filtern will. Es sollen auch Filter im Sinne von spalte1=test,test2 möglich sein. Und genau da versage ich. Sobald der Benutzer das Komma eingegeben hat und damit die Tabelle zum Teil schon gefilert wird ist die zweite Eingabe nur ein Zusatzfilter für die schon heruntergebrochene Tabelle. Das heisst eigentlich sollen in dem Beispiel alle Reihen angezeigt werden, die entweder test oder test2 als Daten führen. Da ich aber nach jedem Buchstaben alles durchprüfe führt es dazu, dass er erst komplett nach test filtert und danach erst nach test2...
Ich hoffe ich habe mich da verständlich ausgedrückt.
Zur Erläuterung nochmal ein genaueres Beispiel.
||column1 ||
||row1||data1 ||
||row2||data2 ||
Eingabe Filtertext: column1=data1
erwartete Ausgabe: data1
Ausgabe: data1
Eingabe Filtertext: column1=data1,data2
erwartete Ausgabe data1,data2
Ausgabe: keine Ausgabe, da zuerst nach data1 gefiltert und danach erst nach data2
Also ich hab hier mal versucht die wichtigsten Dinge meiner Methode rauszuextrahieren. Kann sein, dass ein paar Teile hier nun falsch sind, aber mir gehts eigentlich nur um den Grundgedanken.
Code:
@Override
public boolean select(final Viewer viewer, final Object parentElement, final Object element) {
final String filterString = filterText.getText().toLowerCase();
if (filterString.length() == 0) { return true; }
final mydata myData= (mydata) element;
if (filterString.matches("columnName" + ".+")) {
index = filterString.indexOf("columnName" + ".+");
evaluateText(myData, filterString, i, index + tableColumnsText[i].length())
}
public boolean evaluateText(final mydata data, final String filterText, final int beginningIndex) {
subString = filterText.substring(beginningIndex, filterText.length());
return evaluateString(data.getString(), subString);
}
public boolean evaluateString(final String cellString, final String commaString) {
int countSubstrings = 0;
final String[] items = commaString.split(",");
countSubstrings = items.length;
for (final String s : items) {
if (s.length() != 0) {
if (!cellString.contains(s)) { return false; }
}
}
return true;
}
Vielleicht hab ich ja auch einfach nur einen Hänger, aber vielleicht hat ja hier jemand schonmal ein ähnliches Problem gehabt.
Über Hilfe würde ich mich unheimlich freuen!