2012-02-02 16 views
7

我正在使用CellTable向其添加列。 當我在每個單元格上添加行和單個數據時,它工作正常。GWT CellTable - 每行最後一個單元格中需要有兩個按鈕

它頭如姓名,年齡,與它下面的行地址包含的值

我現在想有一個動作在過去cloumn有兩個按鈕(編輯和刪除按鈕)的單細胞在該列下方的行並按照事件捕獲按鈕點擊事件。

Name Age Address Actions 
A 15 123 Edit Delete 
B 20 578 Edit Delete  
C 

您能否讓我知道如何去做。

感謝

回答

12

有兩種方法可以實現的是:

  1. 子類AbstractCell並實現渲染方法創建兩個按鈕和處理它的事件(見here有詳細介紹)。
  2. 使用CompositeCell添加兩個ActionCell小號

第二種方法是更容易和更清潔。這裏是代碼爲:

public void onModuleLoad() { 
    CellTable<Person> table = new CellTable<Person>(); 

    List<HasCell<Person, ?>> cells = new LinkedList<HasCell<Person, ?>>(); 
    cells.add(new ActionHasCell("Edit", new Delegate<Person>() { 

     @Override 
     public void execute(Person object) { 
      // EDIT CODE 
     } 
    })); 
    cells.add(new ActionHasCell("Delete", new Delegate<Person>() { 

     @Override 
     public void execute(Person object) { 
      // DELETE CODE 
     } 
    })); 

    CompositeCell<Person> cell = new CompositeCell<Person>(cells); 
    table.addColumn(new TextColumn<Person>() { 

     @Override 
     public String getValue(Person object) { 
      return object.getName() 
     } 
    }, "Name"); 

    // ADD Cells for Age and Address 

    table.addColumn(new Column<Person, Person>(cell) { 

     @Override 
     public Person getValue(Person object) { 
      return object; 
     } 
    }, "Actions"); 


} 

private class ActionHasCell implements HasCell<Person, Person> { 
    private ActionCell<Person> cell; 

    public ActionHasCell(String text, Delegate<Person> delegate) { 
     cell = new ActionCell<Person>(text, delegate); 
    } 

    @Override 
    public Cell<Person> getCell() { 
     return cell; 
    } 

    @Override 
    public FieldUpdater<Person, Person> getFieldUpdater() { 
     return null; 
    } 

    @Override 
    public Person getValue(Person object) { 
     return object; 
    } 
} 
+0

非常感謝,因爲我是GWT的新人......這對我很有幫助。但我無法在cellTable中找到任何的deleteRow方法....請讓我知道如何刪除已被點擊刪除的特定行。 – 2012-02-03 12:34:42

+0

基本上你必須將它從你將CellTable添加爲Display的''ListDataProvider''中移除。因此,只要從ListDataProvider中移除該項目,CellTable就會被刷新。 – 2012-02-03 12:56:14

+0

非常感謝....我現在正在跟蹤 – 2012-02-10 04:56:55

1

上面的解決方案是完美的!THX。 另外:如果你喜歡在ActionCell中設計按鈕,那麼你可以做到這一點 - >在類的構造中,你可以建立一個html輸入,在「class」屬性中,你可以添加一個css樣式,這將被使用。:

public ActionHasCell(String text, Delegate<Person> delegate) { 
     cell = new ActionCell<Person>(text, delegate) { 

     public void render(Context context, Person person, SafeHtmlBuilder sb) 
     { 
      SafeHtml html = SafeHtmlUtils.fromTrustedString("<input type=\"button\" value=\"anynameyouwant\" class=\"cssstylename\" />"); 
      sb.append(html); 
     } 

    }; 
} 

這次你不需要字符串,但你可以傳遞參數並使用它們來構建按鈕。

相關問題