2011-08-08 45 views
1

刪除行我使用以下代碼添加一個扣式列到celltable:GWT celltable - 刪除按鈕不會從表

public class CellTableExample implements EntryPoint { 

private static class Contact { 
    private String address; 
    private String name; 

    public Contact(String name, String address) { 
     super(); 
     this.address = address; 
     this.name = name; 
    } 
} 

// The list of data to display. 
    private static List<Contact> CONTACTS = Arrays.asList(
    new Contact("John", "123 Fourth Road asdf asdf asdfasdf"), 
    new Contact("Mary", "222 Lancer Lane") 

); 

@Override 
public void onModuleLoad() { 
    CellTable<Contact> table = new CellTable<Contact>(); 

    //address column 
    TextColumn<Contact> addressColumn = new TextColumn<Contact>(){ 
     @Override 
     public String getValue(Contact contact) { 
      return contact.address; 
     } 
    }; 

    //name column 
    TextColumn<Contact> nameColumn = new TextColumn<Contact>(){ 
     @Override 
     public String getValue(Contact contact) { 
      return contact.name; 
     } 
    }; 

    //delete button column 
    ButtonCell deleteButton= new ButtonCell(); 
    Column <Contact,String> delete= new Column <Contact,String>(deleteButton) 
    { 
     @Override 
     public String getValue(Contact c) 
     { 
      return "Delete"; 
     } 
    }; 
    delete.setFieldUpdater(new FieldUpdater<Contact,String>() 
    { 
     @Override 
     public void update(final int index, Contact c,String value) 
     { 
      SQLRunnerAsync service = (SQLRunnerAsync) GWT.create(SQLRunner.class); 
      AsyncCallback callback = new AsyncCallback() 
      { 
       @Override 
       public void onFailure(Throwable caught) 
       {} 
       @Override 
       public void onSuccess(Object result) 
       { 
        CONTACTS.remove(index); 
        table.redraw(); 
       } 
       }; 
       service.deleteContact(c.id,callback); 
      } 
    }); 
    // Add the columns. 
    table.addColumn(nameColumn, "Name"); 
    table.addColumn(addressColumn, "Address"); 
    table.addColumn(delete, "Delete"); 

    table.setRowCount(CONTACTS.size(), true); 
    table.setRowData(0, CONTACTS); 

    RootPanel.get().add(table); 
} 

}

當按下按鈕時,接點是從刪除數據庫。但是,表格保持不變,直到頁面刷新。有什麼我可以做的,所以當按下按鈕時,該行也會立即從表中刪除?

我添加了代碼:t​​able.redraw()當聯繫人成功地從數據庫中刪除,但它不工作。

回答

1

試試這個從通訊錄中刪除元素之後:

cellTable.setVisibleRangeAndClearData(cellTable.getVisibleRange(), 
true); 
+0

謝謝,試過了..沒有工作。 – sap

+0

我很抱歉聽到這個消息。無論如何,更新模型後它應該是自動的,不是嗎? :/順便說一句,如果它對你沒有用處,你是否希望刪除這個答案?謝謝 – Xorty

+0

這就是我的想法。但是自從gwt第一次啓動應用程序以來,gwt就會獲取數據,如果表格被更改,則必須調用數據庫以再次獲取數據以顯示已編輯的表格。我希望單元格表在一行被刪除時自動執行。 – sap

2

嘗試使用

ListDataProvider<Contact> dataProvider = new ListDataProvider<Contact> (CONTACTS); 
dataProvider.addDataDisplay(table); 

,當你刪除

List<Contact> list = dataProvider.getList(); 
int indexOf = list.indexOf(object); 
list.remove(indexOf); 
dataProvider.refresh(); 
0

既然你還沒有使用ListDataProvider,請嘗試使用LinkedList,修改您的清單爲 -

private static List<Contact> CONTACTS = new LinkedList<Contact>(Arrays.asList(
new Contact("John", "123 Fourth Road asdf asdf asdfasdf"), 
new Contact("Mary", "222 Lancer Lane") 

));