如何在GWT单元格表上应用搜索?

San*_*ain 8 gwt gxt smartgwt

我正在使用GWT 2.3.I我正在使用GWT单元格表.下面是我的单元格表的代码:

public class FormGrid extends SuperGrid {

List<Form> formList;


@Override
public void setColumns(CellTable table) {
    TextColumn<Form> nameColumn = new TextColumn<Form>() {
        @Override
        public String getValue(Form object) {
            return object.getName();
        }
    };
    table.addColumn(nameColumn, "Name");
}

@Override
public void setData() {
    if (formList != null && formList.size() > 0) {
        AsyncDataProvider<Form> provider = new AsyncDataProvider<Form>() {
            @Override
            protected void onRangeChanged(HasData<Form> display) {
                int start = display.getVisibleRange().getStart();
                int end = start + display.getVisibleRange().getLength();
                end = end >= formList.size() ? formList.size() : end;
                List<Form> sub = formList.subList(start, end);
                updateRowData(start, sub);
            }
        };
        provider.addDataDisplay(getTable());
        provider.updateRowCount(formList.size(), true);
    }
}

public List<Form> getFormList() {
    return formList;
}

public void setFormList(List<Form> formList) {
    this.formList = formList;
}
Run Code Online (Sandbox Code Playgroud)

}

在这个我的set列和set数据将被调用来自super class flow.This cell table工作正常.现在我想在这个单元格表中放置一个过滤器类型工具(比如搜索).应该是这样的,单元格表上方有一个texbox,并且在该文本框中写了什么,它应该对所有表单名称进行类似的查询对于该文本框值.

例如,我在网格中有1000个表单.现在,如果用户在单元格表格上方的某个过滤器文本框中写入"app",则会过滤出名称中包含"app"的所有表单,并且网格仅包含这些表单.

这是第一种情况:

另一种情况是我只在网格名称中呈现一列.我在表单中有两个属性(描述,标记).但是我没有渲染它们.如果用户在过滤器框中写入"app",那么它应该是过滤器查询所有三个(名称,描述和标记),如果"app"与三个中的任何一个匹配,则应返回.

我没有得到如何在单元格表中应用过滤器.请帮帮我.谢谢.

Ümi*_*mit 4

您可以在费用中找到实施

这是步骤的简短摘要

1.) 创建一个文本框和一个搜索按钮。
2.) 将 clickHandler 添加到 SearchButton (您也可以将 KeyUpHandler 添加到 Textbox)

searchButton.addClickHandler(new ClickHandler() {
    public void onClick(ClickEvent event) {
        search();
    }
});
Run Code Online (Sandbox Code Playgroud)

3.) 在搜索函数中检索 searchString 并存储它。

private void search() {
    searchString = searchBox.getText();
    setData();
  }
Run Code Online (Sandbox Code Playgroud)

4.) 修改 setdata() 函数以考虑 searchString

@Override
public void setData() {
    if (formList != null && formList.size() > 0) {
        AsyncDataProvider<Form> provider = new AsyncDataProvider<Form>() {
            @Override
            protected void onRangeChanged(HasData<Form> display) {
                int start = display.getVisibleRange().getStart();
                int end = start + display.getVisibleRange().getLength();
                //new function if searchString is specified take into account
                List<Form> sub = getSubList(start,end);
                end = end >= sub.size() ? sub.size() : end;
                updateRowData(sub.subList(start, end);, sub);
            }
        };
        provider.addDataDisplay(getTable());
        provider.updateRowCount(formList.size(), true);
    }
}

private List<Form> getSubList(int start, int end) {
    List<Form> filtered_list = null;
    if (searchString != null) {
        filtered_list= new ArrayList<Form>();
        for (Form form : formList) {
            if (form.getName().equals(searchString) || form.getTag().equals(searchString) || form.getDescription().equals(searchString))
                filtered_list.add(form);                
        }
    }
    else 
        filtered_list = formList;
   return filtered_list;
}
Run Code Online (Sandbox Code Playgroud)