我正在使用带有DataSource的SmartGWT ListGrid。我成功地使用CellFormatter将数字文件大小数据显示为混合文本/数据(即“10 GB”而不是10737418240)。我有过滤设置。
我想做的是让用户过滤CellFormatter输出,而不是基础数据。 IOW,让用户在过滤器框中键入“GB”,并获取大小在GB范围内的所有文件。 DataSource在本地缓存,因此我没有回到服务器获取数据的问题。
编辑:我使用CellFormatter的原因是因为它希望排序正确,IOW在按升序排序时我希望200 KB在10 GB之前,而不是在之后(并且在文本排序中它们是相反)。排序对我来说比过滤更重要,所以如果我必须同时排序和过滤目标相同的数据表示,我将放弃过滤工作。非常感谢任何帮助。谢谢, 格雷格
答案 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。