SmartGWT ListGrid with DataSource,Filter on CellFormatter输出

时间:2014-08-11 21:21:51

标签: filter datasource smartgwt listgrid

我正在使用带有DataSource的SmartGWT ListGrid。我成功地使用CellFormatter将数字文件大小数据显示为混合文本/数据(即“10 GB”而不是10737418240)。我有过滤设置。

我想做的是让用户过滤CellFormatter输出,而不是基础数据。 IOW,让用户在过滤器框中键入“GB”,并获取大小在GB范围内的所有文件。 DataSource在本地缓存,因此我没有回到服务器获取数据的问题。

编辑:我使用CellFormatter的原因是因为它希望排序正确,IOW在按升序排序时我希望200 KB在10 GB之前,而不是在之后(并且在文本排序中它们是相反)。排序对我来说比过滤更重要,所以如果我必须同时排序和过滤目标相同的数据表示,我将放弃过滤工作。

非常感谢任何帮助。谢谢, 格雷格

1 个答案:

答案 0 :(得分:2)

您有两种选择。首先是从数据源返回已修改的值,因此它应该返回“10 GB”字符串值而不是10737418240。

第二种方法对我来说似乎更好 - 你应该使用SimpleType功能。有一个例子:

public class PopulationType extends SimpleType {

    public PopulationType() {
        super("population", FieldType.TEXT);
        // format values in the grid
        this.setSimpleTypeValueExtractor(new SimpleTypeValueExtractor() {
            @Override
            public Object getAtomicValue(Object value) {
                if (value instanceof Integer && ((Integer) value) > 1000000) {
                    return ((Integer) value) / 1000000 + " Mln";
                }
                return "" + value;
            }
        });
    }
}

public void onModuleLoad() {
    final ListGrid countryGrid = new ListGrid();  
    countryGrid.setWidth100();
    countryGrid.setHeight100();
    countryGrid.setAutoFetchData(true);
    countryGrid.setShowFilterEditor(true);
    countryGrid.setShowAllRecords(true);
    WorldXmlDS ds = WorldXmlDS.getInstance();
    ds.getField("population").setType(new PopulationType());
    countryGrid.setDataSource(ds);
    countryGrid.draw();
}

将SimpleType实例设置为要格式化的字段,并设置SimpleTypeValueExtractor以覆盖用于显示,过滤,排序的getAtomicValue。

您可以覆盖其他方法 - 例如如果你需要编辑网格中的值,你也应该设置SimpleTypeValueUpdater。