您好我有一个联系类,其中包含我在 CellTable 中显示的信息。 CellTable 有 DataListProvider , MultiSelectionModel 和 KeyProvider 它会检查联系人的 id 。
DataListProvider和CellTable具有相同的KeyProvider。
如果我选择/取消选择 CellTable 中的项目,并在 TextBox 中显示它们正常工作。但是当我更改TextBox(Contact实例)中Contact项的值并尝试取消选择项目时,selectionmodel表示它仍然被选中?
我尝试使用 clear(),但仍然选择了它!
GWT 2.5 / FireFox
ProvidesKey<Contact> keyProvider = new ProvidesKey<Contact>(){
@Override
public Object getKey(Contact item) {
return item.getIdContact();
}
};
public MyCellTable(boolean canLoad, Integer pagesize, ProvidesKey<T> keyProvider) {
super(-1, resource, keyProvider);
selectionModel = new MultiSelectionModel<T>();
selectionModel .addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
selectionChange();
}
});
dataProvider = new ListDataProvider<T>(keyProvider);
dataProvider.addDataDisplay(this);
}
在选择事件中我打电话
protected void selectionChange(){
Contact c = grid.getGrid().getSelectedItem();
if(c != null){
cpForm.enable();
cpForm.clear();
form.bind(c); // Formular which updates the selected instance
cpForm.add(form);
}else{
cpForm.disable(noseletionText);
}
}
我没有 ValueUpdater
当我选择一个项目时,我生成一个公式,如果我改变了我称之为的东西:
@Override
public void save() {
super.save();
ContactServiceStore.get().updateContact(manager.getBean(),
new MyAsyncCallback<Void>() {
@Override
public void onSuccess(Void result) {
onchange();
}
});
}
我如果调用方法而不更改联系人仍在工作,我可以取消选择,但当我更改名称或其他东西时,我无法选择其他项目或取消选择当前项目!
答案 0 :(得分:0)
您实际上并未在ProvidesKeys
中使用MultiSelectionModel
。您需要像这样创建MultiSelectionModel
:
MultiSelectionModel<T> selectionModel = new MultiSelectionModel<T>(keyProvider);
如果您未向MultiSelectionModel
提供ProvidesKey
,则会将实际对象用作关键字。
确保您还将MultiSelectionModel
添加到表格中:
cellTable.setSelectionModel(selectionModel);
selectionModel.clear()
无效的原因是因为selectionModel
未设置为表格。