GWT不包含TreeTable,但我的项目要求包含树表。所以我使用Tree和FlexTable创建了它。
这里是Bean类:Item
class Item
{
ItemType itemType; //Parent,Child Enum type
long parentId;
long amount;
String itemName;
String qty;
String rate;
//Setter / Getter Methods
}
这是自定义TreeItem类,它具有父项和&之间的关系。儿童用品。我已经使用TreeItemNode创建了一行。
public class TreeItemNode extends TreeItem {
private FlexTable table; //this will use to access child
private FlexTable parentTable; //This will use to access parent of particular child.
//This constructor create parent node
public TreeItemNode(FlexTable parentTable) {
setWidget(parentTable);
this.parentTable=parentTable;
setState(true);
}
//The method used to add Child items in parent
public TreeItem addItem(Widget widget) {
this.table=(FlexTable) widget;
TreeItem ret = new TreeItem(widget);
addItem(ret);
return ret;
}
}
使用项目列表,此方法创建具有父节点关系和子节点关系的树。
class CustomTreeTable extends Tree
{
public void createTreeTable() {
//This map store parent id and tree item object for letter fetch the parent node and add child node in it
treeItemMap = new HashMap<Long, BOQTreeItem>();
for (Item item : itemList) {
if (item.getParentItemId() == 0) {
//Create new parent node
TreeItemNode itemTreeItem = new TreeItemNode(addChildItem(item,
new FlexTable(), true),
"gwt-TreeNode");
treeItemMap.put(item.getId(), treeItem);
addItem(itemTreeItem);
} else {
//Add child node
if (treeItemMap.containsKey(item.getParentItemId())
&& treeItemMap.get(item.getParentItemId()) != null) {
FlexTable dataFlextable = treeItemMap.get(
item.getParentItemId()).getTable();
if (dataFlextable == null) {
dataFlextable = new FlexTable();
treeItemMap.get(item.getParentItemId()).setTable(
dataFlextable);
}
FlexTable treeTable = addChildItem(item, dataFlextable,
false);
treeItemMap.get(item.getParentItemId()).addItem(treeTable);
}
}
}
}
}
使用我的表格如下。 +是我的树节点打开/关闭,如:
ItemName qty rate amount
+ item1 11 1 11 //parent item
---------------------------
- item2 11 2 22
--------------------------------
SubItemName qty rate amount //child item
subItem1 5 2 10
subItem2 8 5 40
------------------------------------
问题是当我想在一个原始(子项)中计算qty * rate而不是使用行索引时可以做但是如果我想要计算所有子项&amp;显示在父行中。然后逻辑变得如此复杂。所以我只想知道我实现的逻辑,比如将实例存储在map和managed中。这是对的吗?我正朝着正确的方向前进或走错路。
答案 0 :(得分:0)
使用DataGrid Widget可能更容易实现您想要实现的目标。
看看GWT ShowCase:here
在DataGrid上,当您单击ShowFriends链接时,您将在父行下显示子项。
希望它有所帮助。 :)