GWT CellTable программно выбирает CheckBoxCell - PullRequest
5 голосов
/ 30 мая 2011

У меня есть cellTable со столбцом CheckBoxCell. То, что я пытаюсь сделать, это иметь набор кнопок вне таблицы ячеек, которые позволяют пользователю автоматически проверять / снимать флажок с другого набора элементов (например, проверять все / снимать все, но я хотел бы иметь более сложные правила ).

Что я не понимаю, так это как получить доступ к элементу (я полагаю, через значения строки / столбца ???) и получить / установить значение.

Может ли кто-нибудь помочь мне разобраться, как ее решить?

Ответы [ 2 ]

15 голосов
/ 30 мая 2011

Предполагая, что вам нужно привязать флажок к «выбору» и легко выбрать группу элементов программно (тонкость: выберите элементы, что приведет к тому, что флажок будет установлен вместо флажков), вы будете использовать MultiSelectionModel.

Пример кода вы найдете в http://gwt.google.com/samples/Showcase/Showcase.html#!CwCellTable,, а именно:

final MultiSelectionModel<ContactInfo> selectionModel = new MultiSelectionModel<ContactInfo>(
    ContactDatabase.ContactInfo.KEY_PROVIDER);
cellTable.setSelectionModel(selectionModel,
    DefaultSelectionEventManager.<ContactInfo> createCheckboxManager());
…
Column<ContactInfo, Boolean> checkColumn = new Column<ContactInfo, Boolean>(
    new CheckboxCell(true, false)) {
  @Override
  public Boolean getValue(ContactInfo object) {
    // Get the value from the selection model.
    return selectionModel.isSelected(object);
  }
};
cellTable.addColumn(checkColumn, SafeHtmlUtils.fromSafeConstant("<br/>"));
cellTable.setColumnWidth(checkColumn, 40, Unit.PX);

Затем, чтобы выбрать элемент (и его флажок будет установлен автоматически), выВы просто сделаете:

selectionModel.setSelected(item, true);

, и вы можете аналогичным образом получить набор всех выбранных элементов с помощью selectionModel.getSelectedSet().

3 голосов
/ 30 мая 2011

Я не знаю, как вы настроили свой cellTable, но я полагаю, что с ним связан dataProvider. Либо ListDataProvider, либо AsyncDataProvider. Вы хотите изменить данные в поставщике, чтобы изменить статус ваших строк.

Вот простой пример для выбора / отмены выбора всех, при условии, что у вас есть uiBinder с cellTable и флажком:

public class MyView extends Composite {

  private class MyTableRow {
    private boolean checked;

    public boolean isChecked() {
        return this.checked;
    }

    public void setChecked(boolean checked) {
        this.checked = checked;
    }

  }

  interface MyViewUiBinder extends UiBinder<Widget, MyView> {
  }

  private static MyViewUiBinder uiBinder = GWT.create(MyViewUiBinder.class);
  private ListDataProvider<MyTableRow> provider = new ListDataProvider<MyTableRow>();
  @UiField(provided = true)
  CellTable<MyTableRow> table;

  public MyView() {
    this.table = new CellTable<MyTableRow>();
    Column<MyTableRow, Boolean> checkBoxColumn = new Column<MyTableRow, Boolean>(new CheckboxCell()) {

        @Override
        public Boolean getValue(MyTableRow object) {
            return object.isChecked();
        }

    };
    this.table.addColumn(checkBoxColumn);
    this.initWidget(uiBinder.createAndBindUi(this));
  }

  @UiHandler("selectAllBox")
  public void onSelectAllClicked(ClickEvent e) {
    for (MyTableRow row : this.provider.getList()) {
        row.setChecked(((CheckBox)e.getSource()).getValue());
    }
  }

}
...