在CellTable列中创建自定义ActionCell

时间:2011-08-11 15:07:43

标签: gwt button cell gwt-2.2-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);

“无法实例化类型列”

您怎么看?

3 个答案:

答案 0 :(得分:0)

来自doku:

  

表格中列的表示。该列可以按需维护每个单元的视图数据。如果需要,新视图数据由单元格的onBrowserEvent方法创建,存储在Column中,并传递给将来对Cell的调用

所以你必须声明这样的事情:

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

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

我仍然不知道你是如何实现删除按钮的,所以如果你能给我们剩下的代码那就太好了。

答案 1 :(得分:0)

您可以使用工作代码:

假设:

TYPE - 您在Cell Table的行中显示的数据类是否相同,因为我假设您要在删除数据时引用数据实例

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;
    }
};

答案 2 :(得分: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));