2013-05-07 70 views
0

你好,我有一個聯繫類的信息,我在CellTable顯示的信息。 的CellTableDataListProviderMultiSelectionModelKeyProvider 它檢查聯繫IDGWT CellTable SelectionModel編輯後不能取消選擇

DataListProvider和CellTable具有相同的KeyProvider。

如果我只選擇/取消CellTable的項目,並在文本框助攻顯示他們工作的罰款。但是當我更改TextBox(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

當我選擇一個項目i生成表現公式和如果我改變了我的電話號碼:

@Override 
public void save() { 
    super.save(); 
    ContactServiceStore.get().updateContact(manager.getBean(), 
      new MyAsyncCallback<Void>() { 

       @Override 
       public void onSuccess(Void result) { 
        onchange(); 
       } 

      }); 
} 

我打電話,如果不改變的方法上的接觸其還在工作,我可以取消,但是當我更改名稱或別的東西,我不能選擇其他的項目或取消當前的項目!

+0

你可以在問題中加入一些代碼嗎?也許'ValueUpdater'實現以及'DataListProvider'和'MultiSelectionModel'的'KeyProvider'。 – enrybo 2013-05-07 16:36:32

+0

好的我已編輯 – 2013-05-08 07:23:02

+0

在你的'KeyProvider'中放置了一個斷點,並確保它真的被調用。難道是保存實例時引發異常嗎?如果沒有捕獲到異常,它可能會中斷取消選擇代碼的執行(檢查Chrome開發者工具控制檯) – 2013-05-08 11:19:17

回答

0

實際上並沒有在您的MultiSelectionModel中使用您的ProvidesKeys。您需要創建MultiSelectionModel像這樣:

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

如果你不使用ProvidesKey提供MultiSelectionModel它會用實際的對象作爲重點。

請確保您還添加MultiSelectionModel表:

cellTable.setSelectionModel(selectionModel); 

原因selectionModel.clear()沒有工作是因爲selectionModel沒有設置表。

+0

感謝它與選擇模型上的keyProvider一起工作! – 2013-05-14 13:39:15