使用GWT创建分层动态网格

使用GWT创建分层动态网格,gwt,grid,hierarchical-data,Gwt,Grid,Hierarchical Data,我试图在GWT中创建一个表示分层数据的网格。 不同级别的列将是相同的,并表示产品是否可用于某个类别 诸如此类: A | B | C | D + Product 1.1 X X X + Product 1.2 X X X + Product 1.3 X X + Product 2.1 X + Product 2.2

我试图在GWT中创建一个表示分层数据的网格。 不同级别的列将是相同的,并表示产品是否可用于某个类别

诸如此类:

                      A | B | C | D
+ Product 1.1         X       X   X
  + Product 1.2       X       X   X
    + Product 1.3     X           X
+ Product 2.1             X
  + Product 2.2           X
...

我想我可以使用CellTable并添加处理程序来显示/隐藏行,但我应该如何管理隐藏所有子体?

基本上,在MVC中工作。控制器捕获事件,更新模型,然后要求数据提供程序刷新显示


我能想到的最简单的方法是,当您捕捉到一个请求隐藏(例如)产品2.1的后代的事件时,循环遍历您的模型对象(我猜是一个列表),并相应地更新子元素。然后使用数据提供程序上的适当方法刷新cellTable。

因此,以下是我的解决方案:

由于无法将侦听器添加到单行(ClickHandler除外),也无法构建自定义行(我使用的是GWT2.4),因此我必须创建一个自定义列。 然后我创建了NodeCell,ButtonCell的一个简单变体,在文本前显示+/-按钮。 如果列是“节点”,则将使用NodeCell。 单击按钮在EventBus上触发ExpandEvent


由于无法找到检索表示该行的小部件的方法,我在自定义表的构造函数中向EventBus添加了一个处理程序,该处理程序更改了使用getRowElement()检索的行的样式。ExpandEvent中的一个参数提供行索引。

您是否查看了GWT showcase中的自定义网格?它显示了一个可扩展的行。我猜你会想要像ShowingFriends这样的东西,它包含当前正在展示的产品。这正是我想要的!谢谢。不幸的是,给出的示例不适用于GWT2.4:它不支持自定义TableBuilder。无论如何,我已经创建了一个带有自定义列的表。只需要在行中添加一个事件侦听器,但不知道如何添加。