1

我有一个包含 3 列的单元格表,其中一列用于名称,一列用于类型,一列用于图像。

我有另一个列表框指定单元格表的类型列中存在的类型。

在单元格表中,多行的类型可能相同。当我在列表框中选择一种类型时,单元格表中不具有相同类型的所有行都应该在图像单元格中添加一个图标。

到目前为止,我可以根据在该单元格本身中输入的值动态搜索添加样式名称。但现在我的意图是根据另一个小部件的值来拥有动态样式名称。

请给我一个答案。下面是提供的代码

public class CellTableExample implements EntryPoint, ChangeHandler {

  CellTable<NameType> ct = new CellTable<NameType>();
  TextColumn<NameType> nameColumn;
  ListBox typeListBox = new ListBox();

  public void onModuleLoad() {
    typeListBox.addChangeHandler(this);
    nameColumn = new TextColumn<NameType>() {
      @Override
      public String getValue(NameType object) {
        return object.getName();
      }
    };
    ct.addColumn(nameColumn, "Name");

    TextColumn<NameType> name1Column = new TextColumn<NameType>() {
      @Override
      public String getValue(NameType object) {
        return object.getType();
      }
    };
    ct.addColumn(name1Column, "Name1");

    List<NameType> values = new ArrayList<NameType>();

    NameType nameType1 = new NameType("name1", "type1");

    NameType nameType2 = new NameType("name2", "type2");

    values.add(nameType1);
    values.add(nameType2);
    ct.setRowData(values);

    ct.setLoadingIndicator(null);
    typeListBox.addItem("type1");
    typeListBox.addItem("type2");
    HorizontalPanel hp = new HorizontalPanel();
    hp.add(typeListBox);
    hp .add(ct);


    RootPanel.get().add(hp);
  }

  @Override
  public void onChange(ChangeEvent event) {
    String type = typeListBox.getValue(typeListBox.getSelectedIndex());
    int rowCount = ct.getRowCount();

    for(int i=0;i < rowCount; i++) {
      String value = ct.getRowElement(i).getCells().getItem(1).getInnerText();

      if(type.equals(value)) {
        Window.alert("came here");
        TableCellElement cellElement = ct.getRowElement(i).getCells().getItem(0);
        cellElement.addClassName("information icon");
      }
    }
  }
}

onChange()方法中,我认为根据列表框中的选择添加类名的逻辑。但我正在寻找更通用的解决方案:)

4

1 回答 1

0

在表格呈现单元格后,我不知道有任何方法可以操纵单元格的内容。但是我有一个想法,虽然不是很好但可行:将一些 id 或自定义 HTML 属性渲染到您的单元格中,以便您以后可以通过标准但非常非 GWT DOM 操作访问它们:

<td><img src=".." id="icon-of-entity-123" /></td>

如果您实现了这样的目标,那么稍后在您的业务逻辑中,即使在渲染之后,您也可以在低级别对其进行操作:

Element e = DOM.getElementById("icon-of-entity-" + getId());
e.setAttribute("class", "someclassname");

我希望有人给你一个更好的解决方案!

于 2013-04-06T19:01:05.987 回答