我对过滤表格有疑问。我使用了ViewerFilter,并将select方法重写为适合该表的方法。 Filtertext本身通过Textfield输入。
所以现在我的问题。例如,我的表格如下所示:
column
123
124
在我的文本字段中,用户可以输入columnname = data1,data2来显示所有具有data1或data2作为数据的行。所以在上面的例子中,如果用户输入column = 123,124,那么两行仍应可见。这里的问题是我在每个输入的字符后刷新我的tableviewer。因此,当用户输入column = 123时,Table仅显示一列。添加时,124到filtertext我过滤我已经过滤的表。所以最后没有数据显示出来。我怎样才能过滤原始的Tabledata?
@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;
}
所以我试图过滤掉该方法的主要组成部分。我可以以某种方式访问未过滤的表吗?