HTMLcopy
1
<div id="container"></div>
CSScopy
6
1
html, body, #container {
2
width: 100%;
3
height: 100%;
4
margin: 0;
5
padding: 0;
6
}
JavaScriptcopy
x
1
anychart.onDocumentReady(function() {
2
3
var tree = anychart.data.tree([
4
{name: "Node 1", id: "1"},
5
{name: "Parent Node", id: "2"},
6
{name: "Child Node 1", parent: 2, id: "3"},
7
{name: "Child Node 2", parent: 2, id: "4"},
8
{name: "Node 2", id: "5"}
9
], anychart.enums.TreeFillingMethod.AS_TABLE);
10
11
var stage = anychart.graphics.create("container");
12
13
// create Data Grid
14
treeDataGrid = anychart.standalones.dataGrid();
15
16
// set Data Tree
17
treeDataGrid.data(tree).headerHeight(20);
18
19
// create button for Parent node
20
treeDataGrid.listen("signal", treeDataGrid.draw, false, treeDataGrid);
21
22
// set style for second column
23
treeDataGrid.column(1).cellTextSettingsOverrider(labelTextSettingsOverrider);
24
25
// create new button
26
var triggerButton = document.createElement("div");
27
28
// set button style
29
triggerButton.style.top = "5px";
30
triggerButton.style.right = "5px";
31
triggerButton.style.width = "auto";
32
triggerButton.style.height = "auto";
33
triggerButton.style.backgroundColor = "#444444";
34
triggerButton.style.color = "white";
35
triggerButton.style.position = "absolute";
36
triggerButton.style.zIndex = 2;
37
triggerButton.style.transition = "0.5s";
38
triggerButton.style.textAlign = "center";
39
triggerButton.style.border = "3px solid #444444";
40
triggerButton.style.borderRadius = "7px 7px 7px 7px";
41
triggerButton.style.fontSize = "18px";
42
triggerButton.style.cursor = "pointer";
43
triggerButton.style.MozUserSelect= "none";
44
triggerButton.style.KhtmlUserSelect= "none";
45
triggerButton.style.WebkitUserSelect= "none";
46
triggerButton.style.userSelect= "none";
47
triggerButton.innerHTML = "Append Point";
48
triggerButton.onclick = function() {
49
addPoint();
50
};
51
52
// append button to container
53
container.appendChild(triggerButton);
54
55
// draw chart
56
treeDataGrid.container(stage).top(triggerButton.offsetHeight + 7).height(stage.height()).width("100%").draw();
57
58
// resize container
59
treeDataGrid.container().height(fullChildrenHeight()+treeDataGrid.top()+treeDataGrid.headerHeight()+1);
60
61
var title = anychart.standalones.title();
62
title.parentBounds(0, 0, "100%", 30)
63
.text("Different Data From the Same Tree")
64
.container(stage)
65
.draw();
66
67
var nodeCount = 3;
68
69
function addPoint(){
70
var name = "Node " + nodeCount;
71
tree.addChild({name: name});
72
nodeCount++;
73
// resize container
74
treeDataGrid.container().height(fullChildrenHeight()+treeDataGrid.top()+treeDataGrid.headerHeight()+1);
75
}
76
77
// get height of all children in the tree
78
function fullChildrenHeight () {
79
var height = 0;
80
var traverser = tree.getTraverser();
81
traverser.reset();
82
while(traverser.advance()){
83
84
// get an item
85
var currentItem = traverser.current();
86
87
// get height of the item
88
var currentHeight = currentItem.get(anychart.enums.GanttDataFields.ROW_HEIGHT);
89
90
// if item height is undefined
91
if (currentHeight !== void 0){
92
height += (currentHeight + 1);
93
} else {
94
// if height of current item is undefined, default height is 20px + 1px row space
95
height +=21;
96
}
97
}
98
return height;
99
}
100
});
101
102
// style setter
103
function labelTextSettingsOverrider(label, dataItem) {
104
if (!dataItem.getParent()) {
105
label.fontColor("#0055aa").fontWeight("bold").fontSize(12).fontStyle("italic");
106
} else {
107
if (dataItem.numChildren()) {
108
label.fontColor("#559955").fontWeight("bold").fontStyle("italic");
109
}
110
}
111
}