2012-06-21 159 views
2

我正在使用gxt的LiveGrid。我想添加filters。我在下面添加了几行,但数据未被过滤。我在这里错过任何东西吗?添加过滤器到LiveGrid?

GridFilters filters = new GridFilters(); 
filters.setLocal(true); 

StringFilter nameFilter = new StringFilter("column name"); 
filters.addFilter(nameFilter); 

filters.init(liveGrid); 
liveGrid.addPlugin(filters); 

回答

2

filter的javadoc:

要将过滤器添加到网格列,创建过滤器的具体子类的实例,传递给构造函数的ValueProvider为列,然后添加过滤到GridFilters

您的代码示例似乎过于重复,应该可能参数化。应该给StringFilter一个ValueProvider,用于你想要过滤的模型对象的属性。以下是如何使用过滤器创建网格的简单概述。

假设你有一个类用户

public class User implements Serializable { 
    private String name; 
    private Integer id; 

    // Setters and getters 
} 

public interface UserProperties extends PropertyAccess<User> { 
    @Path("id") 
    ModelKeyProvider<User> key(); 

    ValueProvider<User, String> name(); 
} 

要创建一个网格,将显示你的用户,你会做如下

private static final UserProperties props = GWT.create(UserProperties.class); 
... 

// Create column config 
ColumnConfig<User, String> nameCol = new ColumnConfig<User, String>(props.name(), 200, "Name"); 

// Create column model 
List<ColumnConfig<User, ?>> l = new ArrayList<ColumnConfig<User, ?>>(); 
l.add(nameCol); 
ColumnModel<User> cm = new ColumnModel<User>(l); 

// Create User store 
ListStore<User> store = new ListStore<User>(props.key()); 

// Create your grid 
final LiveGridView<User> liveGridView = new LiveGridView<User>(); 
liveGridView.setForceFit(true); 

Grid<User> view = new Grid<User>(store, cm) { 
    @Override 
    protected void onAfterFirstAttach() { 
    super.onAfterFirstAttach(); 
    // Get grid data 
    } 
}; 

// Create a String filter for the column 
StringFilter<User> nameFilter = new StringFilter<User>(props.name()); 

// Create a GridFilters 
GridFilters<User> filters = new GridFilters<User>(); 
filters.initPlugin(grid); 
filters.setLocal(true); 
filters.addFilter(nameFilter); 
+0

好吧。 +1 :) –

+0

嗨感谢您的详细回复。我的代码在正常的网格中运行良好。如果我尝试使用活动网格,那么它不是过滤。您的代码是否适用于实时网格?谢谢! – user1016403

0

GridFilters过滤器=新GridFilters(); filters.setLocal(true);

StringFilter nameFilter = new StringFilter(“column name”); filters.addFilter(nameFilter);

filters.init(liveGrid); liveGrid.addPlugin(filters);

如果你想获得过滤器应用后的数据,你需要覆盖AbstractGridFilters的reload()方法。