2

我有一个带有 TextInputCells 列的 CellTable。

当我通过 UI 手动设置值时,bean 被修改。但是,然后,当我将值直接设置到 bean 中时,我无法使表格显示修改。它将始终保留我手动分配的内容。

这是我的专栏:

FieldUpdater<MyBean, String> myFu = new FieldUpdater<MyBean, String>() {
  @Override
  public void update(int index, MyBean object, String value) {
    object.setValue(value);
  }
};

Column<MyBean, String> myCol = new Column<MyBean, String>(new TextInputCell()) {
  @Override
  public String getValue(MyBean object) {
    return object.getValue();
  }
};

这是动作:

@UiHandler("myButton")
public void myButton_onClick(ClickEvent event) {
  for (MyBean my : listOfBeans)
    my.setValue("value");
}

在操作之后,我尝试调用table.redraw()或清除并重新填充ListDataProvider, 但它没有改变任何东西。

我能做些什么 ?

谢谢

4

2 回答 2

2

好的,我找到了一个(牵强的)方法。这很糟糕,但它有效。

int inputTextColumnPos; // position of your column

...

@UiHandler("myButton")
public void myButton_onClick(ClickEvent event) {
  for (MyBean my : listOfBeans) {
    my.setValue("value");

    // get the cell you want to update
    TextInputCell cell = (TextInputCell) table.getColumn(inputTextColumnPos).getCell();
    // re-create the view data for the cell because the current one isn't updated
    TextInputCell.ViewData viewData = new TextInputCell.ViewData("value");
    // CRUSH the other one 
    cell.setViewData(my, viewData);
  }

  // because we're never too sure
  table.redraw();
}
于 2012-08-30T15:25:28.437 回答
0

即使我有同样的问题(我正在使用EditTextCell),但我无法找到解决方案。我几乎尝试了所有的东西。所以我想出了一个替代方案。

我将该列改回TextCell并添加SingleSelectionModelCellTable.setSelectionModel(SingleSelectionModel). 我创建了一个TextBox并将其放在我的CellTable. 我让它像每当用户更改选择时一样工作,TextBox将使用该列的值进行更新。我补充说TextBox.addChangeHandler(),在这个方法中我更新Bean然后刷新DataProvider. 这种方法运行良好。希望能帮助到你。谢谢..

于 2012-08-21T13:31:47.787 回答