Filter SmartGWT ListGrid和数据源,CellFormatter输出上的过滤器
我将SmartGWT ListGrid与数据源一起使用。我成功地使用CellFormatter将数字文件大小数据显示为混合文本/数据(即“10GB”而不是10737418240)。我已经设置好了过滤 我想做的是让用户对CellFormatter输出进行过滤,而不是对底层数据进行过滤。这样,让用户在筛选框中键入“GB”,并获取大小在GB范围内的所有文件。数据源是在本地缓存的,因此我不会遇到返回服务器获取数据的问题 编辑:我使用CellFormatter的原因是因为它希望排序正确,当按递增顺序排序时,我希望200KB在10GB之前,而不是之后(在文本排序中,它们是颠倒的)。排序对我来说比过滤更重要,所以如果我必须让排序和过滤目标都具有相同的数据表示形式,我将放弃过滤工作 任何帮助都将不胜感激。非常感谢。Filter SmartGWT ListGrid和数据源,CellFormatter输出上的过滤器,filter,datasource,smartgwt,listgrid,Filter,Datasource,Smartgwt,Listgrid,我将SmartGWT ListGrid与数据源一起使用。我成功地使用CellFormatter将数字文件大小数据显示为混合文本/数据(即“10GB”而不是10737418240)。我已经设置好了过滤 我想做的是让用户对CellFormatter输出进行过滤,而不是对底层数据进行过滤。这样,让用户在筛选框中键入“GB”,并获取大小在GB范围内的所有文件。数据源是在本地缓存的,因此我不会遇到返回服务器获取数据的问题 编辑:我使用CellFormatter的原因是因为它希望排序正确,当按递增顺序排序时
Greg您有两种选择来完成此操作。首先是从数据源返回已修改的值,因此它应该返回“10GB”字符串值,而不是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实例设置为要格式化的字段,并将SimpleType ValueExtractor设置为覆盖用于显示、筛选和排序的getAtomicValue
您还可以覆盖其他方法—例如,如果您需要编辑网格中的值,您可能还应该设置SimpleTypeValueUpdater。所以我无法将筛选与排序分开?因为排序更为重要,我希望10GB的数据比200KB的数据“大”。实际上,它们似乎是分开的——只要将FieldType.TEXT更改为FieldType.INTEGER就可以了。另外,如果您想以某种方式覆盖排序的值,可以使用ListGridField.setSortNormalizer方法。我需要的是setSortNormalizer。非常感谢。