0

您好,我有一个Contact类,其中包含我在CellTable中显示的信息。CellTable有一个DataListProviderMultiSelectionModelKeyProvider 检查Contactid

DataListProvider 和 CellTable 具有相同的 KeyProvider。

如果我只选择/取消选择CellTable中的项目并将它们显示在TextBox中,则工作正常。但是,当我更改 TextBox(Contact 实例)中的 Contact 项的值并尝试取消选择该项时 selectionmodel 说它仍然被选中?

我尝试使用clear()但它仍然被选中!

GWT 2.5 / 火狐

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();
                }

            });
}

我如果在不更改联系人的情况下调用该方法,它仍然可以工作,我可以取消选择,但是当我更改名称或其他内容时,我无法选择其他项目或取消选择当前项目!

4

1 回答 1

0

你实际上并没有ProvidesKeys在你的MultiSelectionModel. 你需要MultiSelectionModel像这样创建你的:

MultiSelectionModel<T> selectionModel = new MultiSelectionModel<T>(keyProvider);

如果您不提供MultiSelectionModela ProvidesKey,它将使用实际对象作为键。

确保您还添加MultiSelectionModel到表中:

cellTable.setSelectionModel(selectionModel);

不工作的原因selectionModel.clear()是因为selectionModel没有设置到桌子上。

于 2013-05-08T17:48:12.140 回答