2011-08-08 9 views
1

から行を削除しないボタンを削除:GWTのcelltable - 私は次のコードを使用して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); 
} 

}ボタンが押され

を、接触がから削除されますデータベース。ただし、ページはリフレッシュされるまで同じままです。私はボタンが押されたときに、その行もすぐにテーブルから削除されるように何かできるのですか?

連絡先がデータベースから正常に削除されたが、機能していない場合は、code:table.redraw()を追加しました。

答えて

1

連絡先から要素を削除した後、これを試してみてください:

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

ありがとうございました。試してみました。 – sap

+0

私はそれを聞いて申し訳ありません。とにかく、それはモデルを更新した後に自動でなければならないでしょうか? :/ Btw、あなたが役に立たなかった場合、この回答を削除しますか?ありがとう – Xorty

+0

それは私が考えたものです。しかし、gwtはアプリケーションが初めて起動するとデータを取得します。テーブルが変更された場合は、データベースを呼び出してデータを再度取得して編集済みのテーブルを表示する必要があります。私は行が削除されたときにセルテーブルが自動的にそれを行うことを望んでいました。 – sap

2

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

を使用してみてください、あなたはListDataProvider使用していないので、あなたが

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

を削除すると、使用してみてください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") 

));

関連する問題