首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何过滤TreeGrid?

如何过滤TreeGrid?
EN

Stack Overflow用户
提问于 2012-03-01 11:16:42
回答 2查看 3.1K关注 0票数 0

我现在有一个TreeGrid,它显示具有名称的节点。数据来自手动填充的DataSource

当在nodeName字段上设置过滤器时,不会递归地执行过滤器,因此我只能过滤根节点

如何告诉筛选器在子节点中搜索匹配项?

PS:在下面的代码中,我有3个节点Root > Run > Child1。如果我尝试过滤器并键入"R",就会得到RootRun。但是,如果我输入"C",就会得到"no results

代码

DataSource:

代码语言:javascript
复制
package murex.otk.gwt.gui.client.ui.datasource;

import java.util.List;

import murex.otk.gwt.gui.client.ui.record.TreeRecord;

import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.fields.DataSourceIntegerField;
import com.smartgwt.client.data.fields.DataSourceTextField;

public class ClassesDataSource extends DataSource {

    private static ClassesDataSource instance = null;

    public static ClassesDataSource getInstance() {
        if (instance == null) {
            instance = new ClassesDataSource("classesDataSource");
        }
        return instance;
    }

    private ClassesDataSource(String id) {
        setID(id);

        DataSourceTextField nodeNameField = new DataSourceTextField("nodeName");
        nodeNameField.setCanFilter(true);
        nodeNameField.setRequired(true);

        DataSourceIntegerField nodeIdField = new DataSourceIntegerField("nodeId");
        nodeIdField.setPrimaryKey(true);
        nodeIdField.setRequired(true);

        DataSourceIntegerField nodeParentField = new DataSourceIntegerField("nodeParent");
        nodeParentField.setRequired(true);
        nodeParentField.setForeignKey(id + ".nodeId");
        nodeParentField.setRootValue(0);

        setFields(nodeIdField, nodeNameField, nodeParentField);
        setClientOnly(true);
    }

    public void populateDataSource(List<String> classNames) {
        TreeRecord root = new TreeRecord("Root", 0);
        addData(root);
        TreeRecord child1 = new TreeRecord("Child1", root.getNodeId());
        addData(child1);
        TreeRecord child2 = new TreeRecord("Run", child1.getNodeId());
        addData(child2);
    }

}

Main

代码语言:javascript
复制
public void onModuleLoad() {
    ClassesDataSource.getInstance().populateDataSource(new ArrayList<String>());
    final TreeGrid employeeTree = new TreeGrid();
    employeeTree.setHeight(350);
    employeeTree.setDataSource(ClassesDataSource.getInstance());
    employeeTree.setAutoFetchData(true);
    TreeGridField field = new TreeGridField("nodeName");
    field.setCanFilter(true);
    employeeTree.setFields(field);
    employeeTree.setShowFilterEditor(true);     
    employeeTree.setAutoFetchAsFilter(true);
    employeeTree.setFilterOnKeypress(true);
    employeeTree.draw();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-01 15:20:18

我解决了这个问题。

问题是,过滤器调用服务器来获取数据,而我的数据源被设置为客户端(仅为)。要解决这个问题,employeeTree必须有employeeTree.setLoadDataOnDemand(false);

票数 1
EN

Stack Overflow用户

发布于 2012-03-25 23:47:43

您也可以使用employeeTree.setKeepParentsOnFilter(真)

http://www.smartclient.com/smartgwtee/javadoc/com/smartgwt/client/widgets/tree/TreeGrid.html#setKeepParentsOnFilter(java.lang.Boolean)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9515183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档