Apr 11, 2013, 8:42 AM
Ok this is the code for Default.aspx (which is the parent page in our test case)
Next one is our child window that is been open by the parent it's called Setup.aspx
Thanks
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Setup.aspx.cs" Inherits="Setup_Setup" %>
<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Setup</title>
<script type="text/javascript">
var getTreeNodes = function (tree, nodes, parentId, nodeName, nodeId, isFolder, toAdd) {
try {
var length = nodes.length;
var element = null;
for (var i = 0; i < length; i++) {
element = nodes[i];
if (element && element.id) {
if (toAdd) {
if (parentId == parseInt(element.id, 10)) {
if (nodes[i]) { //add new node under parent
nodes[i].appendChild(new parent.Ext.tree.TreeNode({ text: nodeName, iconCls: isFolder ? "icon-folder" : "icon-page", id: nodeId, leaf: !isFolder, expanded: false, editable: false, allowChildren: false, "sortIndex": nodeName }));
break;
}
}
} else {
if (nodeId == parseInt(element.id, 10)) {
if (nodes[i]) { //remove node
tree.removeNode(nodes[i]);
break;
}
}
}
if (element.childNodes) {
getTreeNodes(tree, element.childNodes, parentId, nodeName, nodeId, isFolder, toAdd);
}
}
}
} catch (ex) {
console.error(ex);
}
};
var createNewNode = function () {
if (opener.treeMainWindow) {
getTreeNodes(opener.treeMainWindow, opener.treeMainWindow.root.childNodes, 1, 'new node test', '123456', false, true);
} else {
console.log('Tree not found!');
}
};
</script>
</head>
<body style="background-color:#DFE8F6">
<form id="form1" runat="server">
<div>
<ext:ResourceManager ID="internalResourceManager" runat="server" />
<ext:Viewport ID="Viewport1" runat="server" AutoScroll="false">
<Items>
<ext:Panel ID="pnlTrees" runat="server" Collapsible="true" Region="West" Split="true"
Title="" Width="250" AutoHeight="True" Layout="Fit" BodyStyle="background-color:#DFE8F6;background-image:none;">
<Items>
<ext:TreePanel ID="tree" ClientIDMode="Static" Icon="Vcard" Height="550"
AutoScroll="true" UseArrows="true" Lines="false" runat="server" Region="West"
Margins="3 0 3 3" CMargins="3 3 3 3" MinWidth="150" Split="true" Visible="true"
Border="false">
<TopBar>
<ext:Toolbar ID="Toolbar2" runat="server" Layout="hbox">
<Items>
<ext:Button runat="server" Text="Add New node">
<Listeners>
<Click Handler="createNewNode('Setup.aspx');" />
</Listeners>
</ext:Button>
</Items>
</ext:Toolbar>
</TopBar>
</ext:TreePanel>
</Items>
</ext:Panel>
</Items>
</ext:Viewport>
</div>
</form>
</body>
</html>
and this is Default.aspx.cs code to keep the tree generation code separate which is not causing issues at all:using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using Ext.Net;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
treeMainWindow.Width = Unit.Pixel(300);
treeMainWindow.Height = Unit.Pixel(450);
treeMainWindow.Icon = Icon.BookOpen;
treeMainWindow.Title = "Catalog";
treeMainWindow.AutoScroll = true;
Ext.Net.TreeNode root = new Ext.Net.TreeNode("Composers");
root.Expanded = true;
treeMainWindow.Root.Add(root);
List<Composer> composers = this.GetData();
int index = 1;
foreach (Composer composer in composers)
{
Ext.Net.TreeNode composerNode = new Ext.Net.TreeNode(index.ToString(), composer.Name, Icon.UserGray);
root.Nodes.Add(composerNode);
foreach (Composition composition in composer.Compositions)
{
Ext.Net.TreeNode compositionNode = new Ext.Net.TreeNode(index.ToString(), "random" + index.ToString(), Icon.Add);
composerNode.Nodes.Add(compositionNode);
foreach (Piece piece in composition.Pieces)
{
Ext.Net.TreeNode pieceNode = new Ext.Net.TreeNode(index.ToString(), piece.Title, Icon.Music);
compositionNode.Nodes.Add(pieceNode);
index++;
}
index++;
}
index++;
}
}
public class Composer
{
public Composer(string name) { this.Name = name; }
public string Name { get; set; }
private List<Composition> compositions;
public List<Composition> Compositions
{
get
{
if (this.compositions == null)
{
this.compositions = new List<Composition>();
}
return this.compositions;
}
}
}
public class Composition
{
public Composition() { }
public Composition(CompositionType type)
{
this.Type = type;
}
public CompositionType Type { get; set; }
private List<Piece> pieces;
public List<Piece> Pieces
{
get
{
if (this.pieces == null)
{
this.pieces = new List<Piece>();
}
return this.pieces;
}
}
}
public class Piece
{
public Piece() { }
public Piece(string title)
{
this.Title = title;
}
public string Title { get; set; }
}
public enum CompositionType
{
Concertos,
Quartets,
Sonatas,
Symphonies
}
public List<Composer> GetData()
{
Composer beethoven = new Composer("Beethoven");
Composition beethovenConcertos = new Composition(CompositionType.Concertos);
Composition beethovenQuartets = new Composition(CompositionType.Quartets);
Composition beethovenSonatas = new Composition(CompositionType.Sonatas);
Composition beethovenSymphonies = new Composition(CompositionType.Symphonies);
beethovenConcertos.Pieces.AddRange(new List<Piece> {
new Piece{ Title = "No. 1 - C" },
new Piece{ Title = "No. 2 - B-Flat Major" },
new Piece{ Title = "No. 3 - C Minor" }
});
beethovenQuartets.Pieces.AddRange(new List<Piece> {
new Piece{ Title = "Six String Quartets" },
new Piece{ Title = "Three String Quartets" },
new Piece{ Title = "Grosse Fugue for String Quartets" }
});
beethovenSonatas.Pieces.AddRange(new List<Piece> {
new Piece{ Title = "Sonata in A Minor" },
new Piece{ Title = "sonata in F Major" }
});
beethovenSymphonies.Pieces.AddRange(new List<Piece> {
new Piece{ Title = "No. 1 - C Major" },
new Piece{ Title = "No. 2 - D Major" }
});
beethoven.Compositions.AddRange(new List<Composition>{
beethovenConcertos,
beethovenQuartets,
beethovenSonatas,
beethovenSymphonies
});
Composer mozart = new Composer("Mozart");
Composition mozartConcertos = new Composition(CompositionType.Concertos);
mozartConcertos.Pieces.AddRange(new List<Piece> {
new Piece{ Title = "Piano Concerto No. 12" },
new Piece{ Title = "Piano Concerto No. 17" },
new Piece{ Title = "Clarinet Concerto" },
new Piece{ Title = "Violin Concerto No. 5" },
new Piece{ Title = "Violin Concerto No. 4" }
});
mozart.Compositions.Add(mozartConcertos);
return new List<Composer> { beethoven, mozart };
}
}
Next one is our child window that is been open by the parent it's called Setup.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Setup.aspx.cs" Inherits="Setup_Setup" %>
<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Setup</title>
<script type="text/javascript">
var getTreeNodes = function (tree, nodes, parentId, nodeName, nodeId, isFolder, toAdd) {
try {
var length = nodes.length;
var element = null;
for (var i = 0; i < length; i++) {
element = nodes[i];
if (element && element.id) {
if (toAdd) {
if (parentId == parseInt(element.id, 10)) {
if (nodes[i]) { //add new node under parent
nodes[i].appendChild(new parent.Ext.tree.TreeNode({ text: nodeName, iconCls: isFolder ? "icon-folder" : "icon-page", id: nodeId, leaf: !isFolder, expanded: false, editable: false, allowChildren: false, "sortIndex": nodeName }));
break;
}
}
} else {
if (nodeId == parseInt(element.id, 10)) {
if (nodes[i]) { //remove node
tree.removeNode(nodes[i]);
break;
}
}
}
if (element.childNodes) {
getTreeNodes(tree, element.childNodes, parentId, nodeName, nodeId, isFolder, toAdd);
}
}
}
} catch (ex) {
console.error(ex);
}
};
var createNewNode = function () {
if (opener.treeMainWindow) {
getTreeNodes(opener.treeMainWindow, opener.treeMainWindow.root.childNodes, 1, 'new node test', '123456', false, true);
} else {
console.log('Tree not found!');
}
};
</script>
</head>
<body style="background-color:#DFE8F6">
<form id="form1" runat="server">
<div>
<ext:ResourceManager ID="internalResourceManager" runat="server" />
<ext:Viewport ID="Viewport1" runat="server" AutoScroll="false">
<Items>
<ext:Panel ID="pnlTrees" runat="server" Collapsible="true" Region="West" Split="true"
Title="" Width="250" AutoHeight="True" Layout="Fit" BodyStyle="background-color:#DFE8F6;background-image:none;">
<Items>
<ext:TreePanel ID="tree" ClientIDMode="Static" Icon="Vcard" Height="550"
AutoScroll="true" UseArrows="true" Lines="false" runat="server" Region="West"
Margins="3 0 3 3" CMargins="3 3 3 3" MinWidth="150" Split="true" Visible="true"
Border="false">
<TopBar>
<ext:Toolbar ID="Toolbar2" runat="server" Layout="hbox">
<Items>
<ext:Button runat="server" Text="Add New node">
<Listeners>
<Click Handler="createNewNode('Setup/Setup.aspx');" />
</Listeners>
</ext:Button>
</Items>
</ext:Toolbar>
</TopBar>
</ext:TreePanel>
</Items>
</ext:Panel>
</Items>
</ext:Viewport>
</div>
</form>
</body>
</html>
and the last part is Setup.aspx.cs code which simply generates the same tree as the one in default.aspx page:using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using Ext.Net;
public partial class Setup_Setup : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
tree.ID = "TreePanel1";
tree.Width = Unit.Pixel(300);
tree.Height = Unit.Pixel(450);
tree.Icon = Icon.BookOpen;
tree.Title = "Catalog";
tree.AutoScroll = true;
StatusBar statusBar = new StatusBar();
statusBar.AutoClear = 1000;
tree.BottomBar.Add(statusBar);
tree.Listeners.Click.Handler = statusBar.ClientID + ".setStatus({text: 'Node Selected: <b>' + node.text + '</b>', clear: true});";
tree.Listeners.ExpandNode.Handler = statusBar.ClientID + ".setStatus({text: 'Node Expanded: <b>' + node.text + '</b>', clear: true});";
tree.Listeners.ExpandNode.Delay = 30;
tree.Listeners.CollapseNode.Handler = statusBar.ClientID + ".setStatus({text: 'Node Collapsed: <b>' + node.text + '</b>', clear: true});";
Ext.Net.TreeNode root = new Ext.Net.TreeNode("Composers");
root.Expanded = true;
tree.Root.Add(root);
List<Composer> composers = this.GetData();
foreach (Composer composer in composers)
{
Ext.Net.TreeNode composerNode = new Ext.Net.TreeNode(composer.Name, Icon.UserGray);
root.Nodes.Add(composerNode);
foreach (Composition composition in composer.Compositions)
{
Ext.Net.TreeNode compositionNode = new Ext.Net.TreeNode(composition.Type.ToString());
composerNode.Nodes.Add(compositionNode);
foreach (Piece piece in composition.Pieces)
{
Ext.Net.TreeNode pieceNode = new Ext.Net.TreeNode(piece.Title, Icon.Music);
compositionNode.Nodes.Add(pieceNode);
}
}
}
}
public class Composer
{
public Composer(string name) { this.Name = name; }
public string Name { get; set; }
private List<Composition> compositions;
public List<Composition> Compositions
{
get
{
if (this.compositions == null)
{
this.compositions = new List<Composition>();
}
return this.compositions;
}
}
}
public class Composition
{
public Composition() { }
public Composition(CompositionType type)
{
this.Type = type;
}
public CompositionType Type { get; set; }
private List<Piece> pieces;
public List<Piece> Pieces
{
get
{
if (this.pieces == null)
{
this.pieces = new List<Piece>();
}
return this.pieces;
}
}
}
public class Piece
{
public Piece() { }
public Piece(string title)
{
this.Title = title;
}
public string Title { get; set; }
}
public enum CompositionType
{
Concertos,
Quartets,
Sonatas,
Symphonies
}
public List<Composer> GetData()
{
Composer beethoven = new Composer("Beethoven");
Composition beethovenConcertos = new Composition(CompositionType.Concertos);
Composition beethovenQuartets = new Composition(CompositionType.Quartets);
Composition beethovenSonatas = new Composition(CompositionType.Sonatas);
Composition beethovenSymphonies = new Composition(CompositionType.Symphonies);
beethovenConcertos.Pieces.AddRange(new List<Piece> {
new Piece{ Title = "No. 1 - C" },
new Piece{ Title = "No. 2 - B-Flat Major" },
new Piece{ Title = "No. 3 - C Minor" }
});
beethovenQuartets.Pieces.AddRange(new List<Piece> {
new Piece{ Title = "Six String Quartets" },
new Piece{ Title = "Three String Quartets" },
new Piece{ Title = "Grosse Fugue for String Quartets" }
});
beethovenSonatas.Pieces.AddRange(new List<Piece> {
new Piece{ Title = "Sonata in A Minor" },
new Piece{ Title = "sonata in F Major" }
});
beethovenSymphonies.Pieces.AddRange(new List<Piece> {
new Piece{ Title = "No. 1 - C Major" },
new Piece{ Title = "No. 2 - D Major" }
});
beethoven.Compositions.AddRange(new List<Composition>{
beethovenConcertos,
beethovenQuartets,
beethovenSonatas,
beethovenSymphonies
});
Composer mozart = new Composer("Mozart");
Composition mozartConcertos = new Composition(CompositionType.Concertos);
mozartConcertos.Pieces.AddRange(new List<Piece> {
new Piece{ Title = "Piano Concerto No. 12" },
new Piece{ Title = "Piano Concerto No. 17" },
new Piece{ Title = "Clarinet Concerto" },
new Piece{ Title = "Violin Concerto No. 5" },
new Piece{ Title = "Violin Concerto No. 4" }
});
mozart.Compositions.Add(mozartConcertos);
return new List<Composer> { beethoven, mozart };
}
}
Javascript is included in each aspx page so there are no other external files used.Thanks