GWT CellTable-需要在每行的最后一个单元格中有两个按钮

时间:2012-02-02 06:58:20

标签: gwt

我正在使用CellTable向其中添加列。 当我在每个单元格上添加行和单个数据时,它工作正常。

它包含名称,年龄,地址等标题,其下方的行包含值

我现在希望在最后一行中使用两个按钮(编辑和删除按钮)在此列下面的行中的单个单元格中捕获一个动作cloumn,并按顺序捕获按钮单击事件。

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

请你告诉我怎么做。

由于

2 个答案:

答案 0 :(得分:12)

有两种方法可以实现这一目标:

  1. 子类AbstractCell并实现render方法以创建两个按钮并处理其事件(有关详细信息,请参阅here)。
  2. 使用CompositeCell添加两个ActionCell s
  3. 第二种方法更简单,更清洁。这是代码:

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

答案 1 :(得分:1)

上述解决方案非常完美!THX。 另外:如果您喜欢在ActionCell中设计按钮,那么您可以这样做 - &gt;在类的构造中,您可以构建一个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);
        }

    };
}

这次你不需要String,但你可以传递参数并使用它们来构建按钮。