GWT CellTable - необходимо иметь две кнопки в последней отдельной ячейке каждой строки - PullRequest
7 голосов
/ 02 февраля 2012

Я использую CellTable для добавления столбцов к нему. Он отлично работает, когда я добавляю строки и отдельные данные в каждую ячейку.

У него есть заголовок, такой как Имя, Возраст, Адрес со строками под ним, который содержит значения

Теперь я хочу, чтобы в последнем столбце в строках под этим столбцом были расположены кнопки «Действия» с двумя кнопками («Редактировать» и «Удалить») в одной ячейке и соответствующим образом фиксировать события нажатия кнопки.

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

Не могли бы вы, пожалуйста, дайте мне знать, как это сделать.

Спасибо

Ответы [ 2 ]

12 голосов
/ 03 февраля 2012

Для этого есть два способа:

  1. Подкласс AbstractCell и реализация метода рендеринга для создания двух кнопок и обработки их событий (см. здесь для получения дополнительной информации).
  2. Используйте CompositeCell , чтобы добавить две ActionCell s

Второй подход легче и чище. Вот код для этого:

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 голос
/ 17 июля 2012

Решение выше, идеально! THX. Кроме того: если вам нравилось создавать кнопки в ActionCell, то вы могли бы сделать это -> В конструкции класса вы можете создать ввод html, а в атрибуте «class» вы можете добавить стиль CSS, который будет used.:

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

    };
}

На этот раз вам не нужна строка, но вы можете передавать параметры и использовать их для создания кнопки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...