Создание пользовательских ActionCell в столбце CellTable
Я хочу, чтобы у одного из столбцов таблицы была кнопка deleteButton.
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"
Как вы думаете?
3 ответа
Здесь вы идете с рабочим кодом:
Предположения:
ТИП - Является ли класс данных, которые вы отображаете в строках таблицы ячеек, одинаковым, потому что я предполагаю, что вы хотите ссылаться на экземпляр данных, когда собираетесь его удалить
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;
}
};
Из доку:
Представление столбца в таблице. Столбец может поддерживать данные просмотра для каждой ячейки по требованию. Новые данные представления, если необходимо, создаются методом onBrowserEvent ячейки, сохраняются в столбце и передаются в последующие вызовы ячейки.
Таким образом, вы должны объявить это примерно так:
Column<String, String> colum = new Column<String, String>(null) {
@Override
public String getValue(String object) {
// TODO Auto-generated method stub
return null;
}
};
Тем не менее, я точно не знаю, как вы реализуете кнопку удаления, поэтому было бы неплохо, если бы вы могли дать нам оставшуюся часть кода.
Это работает
//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));