2011-08-11 2 views
4

Я хочу, чтобы один из моих столбцов таблицы имел deleteButton.Создание пользовательского ActionCell в столбце CellTable

ActionCell<Entrata> deleteCell = new ActionCell<Entrata>("x",new Delegate<Entrata>() { 
      @Override 
      public void execute(Entrata object) { 
       // rpc stuff.... 
      } 
     }); 

Хорошо, но эта линия генерирует ошибку:

Column<Entrata,Entrata> deleteColumn = new Column<Entrata, Entrata>(deleteCell); 

"Не удается создать экземпляр типа Column"

Что вы думаете?

ответ

0

Здесь вы идете с рабочим кодом:

Предположения:

TYPE - это класс данных, которые вы показать в строках ячейки таблицы это то же самое, потому что я предполагаю, что вы хотите ссылку на экземпляр данных, когда вы собираетесь удалить его

public class DeleteColumn extends Column<TYPE, TYPE> 
{ 
    public DeleteColumn() 
    { 

     super(new ActionCell<TYPE>("Delete", new ActionCell.Delegate<TYPE>() { 
      @Override 
      public void execute(TYPE record) 
      { 
       /** 
        *Here you go. You got a reference to an object in a row that delete was clicked. Put your "delete" code here 
        */ 
      } 
     })); 
    } 

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

И как добавить его в CellTable? Мне это удалось, но когда я нажимаю на ячейку действия, я получаю ClassCastException – Ben

+0

@UiField CellTable listTable; listTable.addColumn (новый DeleteColumn(), "Удалить"); –

0

От Доку:

A representation of a column in a table. The column may maintain view data for each cell on demand. New view data, if needed, is created by the cell's onBrowserEvent method, stored in the Column, and passed to future calls to Cell's

Таким образом, вы должны declar это что-то вроде этого:

Column<String, String> colum = new Column<String, String>(null) { 

     @Override 
     public String getValue(String object) { 
      // TODO Auto-generated method stub 
      return null; 
     } 
    }; 

Тем не менее, я не знаю точно, как вы реализуете кнопку удаления, так что было бы хорошо, если вы можете предоставить нам остальную часть вашего кода.

0

Это работает

//table = initialized CellTable with content already loaded 

ActionCell editCell = new ActionCell<EmployeeObject>("remove", new ActionCell.Delegate<EmployeeObject>() { 
      public void execute(EmployeeObject object){ 
       List<EmployeeObject> list = new ArrayList<EmployeeObject>(table.getVisibleItems()); 
       for(int i = 0; i < list.size(); i ++){ 
        if(object.getFirstname().equals(list.get(i).getFirstname())){ 
         list.remove(i); 
         break; 
        } 
       } 
       table.setRowData(list); 
      } 
     }); 

Column<EmployeeObject, ActionCell> editColumn = (new IdentityColumn(editCell));