現在、フィルタリング用のテキストボックスとヘッダータイトルを含むデータグリッドのカスタムヘッダーを実装しています。テキストボックスをクリックすると、列がソートされ、フィルタリングできません。ソート部分を削除すると、フィルタリングは正常に機能します。フィルタリングとソートの両方を実行できるように、アイデアを提案してください。以下は私のサンプルコードです。(すべてが含まれているわけではありません。コードの関連部分のみを示しています)
public class TextBoxHeader<T> extends Header<String> {
public TextBoxHeader(String title, String width) {
super(new TextInputCell());
this.title = title;
if (width != null) {
this.width = width;
}
}
@Override
public void render(Context context, SafeHtmlBuilder sb) {
if (value == null) {
value = "";
}
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("<input type=\"text\" tabindex=\"-1\" value=\"" + value + "\" id=\"" + TEXT_BOX_ID
+ "\" style=\" width:130px");
//stringBuilder.append(width);
stringBuilder.append(" \" /> </input> <BR>");
stringBuilder.append(title);
sb.append(SafeHtmlUtils.fromSafeConstant(stringBuilder.toString()));
}
@Override
public void onBrowserEvent(Context context, Element elem, NativeEvent event) {
}
}
this sort event handler is in another class.
protected class DataGridSortEvent implements ColumnSortEvent.Handler {
@Override
public void onColumnSort(ColumnSortEvent event) {
System.out.println("inside DataGridSortEvent-->"+event.isSortAscending());
//customGrid.getDataProvider().refresh();
Collections.sort(customGrid.getDataProvider().getList(), nameComparator);
//customGrid.getDataProvider().refresh();
/*sortHandler.setComparator(name, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
System.out.println("inside comparator");
return o1.getName().compareTo(o2.getName());
}
});*/
}
}
Any ideas to handle both (Sort and filter)???