Hope the following sample helps you, see the comments.
Example
<%@ Page Language="C#" %>
<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!X.IsAjaxRequest)
{
object o = this.Session["selection"];
if (o != null)
{
string id = o.ToString();
if (id == this.TreePanel1.Root[0].NodeID)
{
this.TreePanel1.CallNode("select", id);
}
else
{
string handler = String.Format("onRender(this, '{0}');", id);
this.TreePanel1.Listeners.Render.Handler = handler;
}
}
}
}
protected void NodeLoad(object sender, NodeLoadEventArgs e)
{
if (!string.IsNullOrEmpty(e.NodeID))
{
string nodeIdToSelect = e.ExtraParams["nodeIdToSelect"];
if (nodeIdToSelect != null)
{
//Here you need to implement adding respective nodes
string msg = String.Format("You should add respective nodes to select '{0}' node", nodeIdToSelect);
X.Msg.Alert("Not implemented", msg).Show();
//this.DefaultSelectionModel1.Select(nodeIdToSelect);
}
else
{
for (int i = 1; i < 6; i++)
{
AsyncTreeNode asyncNode = new AsyncTreeNode();
asyncNode.Text = e.NodeID + i;
asyncNode.NodeID = e.NodeID + i;
e.Nodes.Add(asyncNode);
}
for (int i = 6; i < 11; i++)
{
Ext.Net.TreeNode treeNode = new Ext.Net.TreeNode();
treeNode.Text = e.NodeID + i;
treeNode.NodeID = e.NodeID + i;
treeNode.Leaf = true;
e.Nodes.Add(treeNode);
}
}
}
}
[DirectMethod]
public void SaveSelection(string id)
{
this.Session["selection"] = id;
}
</script>
<!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 runat="server">
<title>Ext.NET Example</title>
<script type="text/javascript">
var onAppend = function (tree, node, nodeIdToSelect) {
if (!tree.restoreSelectionLock) {
if (node.id === nodeIdToSelect) {
tree.getSelectionModel().select(node);
tree.restoreSelectionLock = true;
}
}
};
var onSelectionChange = function (node) {
//here you can save parent nodes ids as well
//to access a parent node use node.parentNode
Ext.net.DirectMethods.SaveSelection(node.id);
};
var onRender = function (tree, nodeId) {
tree.loader.on(
"beforeload",
function (loader) {
if (!loader.baseParams) {
loader.baseParams = {};
};
Ext.apply(loader.baseParams, { "nodeIdToSelect": nodeId });
},
null,
{
single : true
});
tree.getRootNode().expand();
};
</script>
</head>
<body>
<form runat="server">
<ext:ResourceManager runat="server" />
<ext:TreePanel
ID="TreePanel1"
runat="server"
Title="Tree"
AutoHeight="true"
Border="false">
<Loader>
<ext:PageTreeLoader OnNodeLoad="NodeLoad" />
</Loader>
<Root>
<ext:AsyncTreeNode NodeID="0" Text="Root" />
</Root>
<SelectionModel>
<ext:DefaultSelectionModel ID="DefaultSelectionModel1" runat="server" >
<Listeners>
<SelectionChange Handler="onSelectionChange(node);" />
</Listeners>
</ext:DefaultSelectionModel>
</SelectionModel>
</ext:TreePanel>
</form>
</body>
</html>