Loosing state (selected node) in asp.net treeview, whats wrong ?

16 views
Skip to first unread message

Falcula

unread,
Dec 3, 2007, 8:27:14 AM12/3/07
to DotNetDevelopment, VB.NET, C# .NET, ADO.NET, ASP.NET, XML, XML Web Services,.NET Remoting
Hello,

I have a treeview control, when i select a item i navigate to url. But
selected node is lost, it reset itself, loosing state.

I post my code here. Thanks in advance.



<script language="javascript">
var selectedPageId = 1;
function OnPageClick(pageId)
{
selectedPageId = pageId;
parent.location = "default.aspx?id="+pageId;
}
<%=javascript%>

</script>
<asp:TreeView ID="SubMenuTree" EnableClientScript="true"
EnableViewState="true" ExpandDepth="1"
OnSelectedNodeChanged="nodeSelect" OnTreeNodePopulate="PopulateNode"
runat="server" ImageSet="XPFileExplorer" NodeIndent="15">
<ParentNodeStyle Font-Bold="False" />
<HoverNodeStyle Font-Underline="True" ForeColor="#6666AA" />
<SelectedNodeStyle BackColor="#B5B5B5" Font-Underline="False"
HorizontalPadding="0px"
VerticalPadding="0px" />
<NodeStyle Font-Names="Tahoma" Font-Size="8pt" ForeColor="Black"
HorizontalPadding="2px"
NodeSpacing="0px" VerticalPadding="2px" />
<Nodes>
<asp:TreeNode Text="Root" SelectAction="Select"
PopulateOnDemand="True" Value="0"/>
</Nodes>
</asp:TreeView>



protected void PopulateNode(Object sender, TreeNodeEventArgs
e)
{

// Call the appropriate method to populate a node at a
particular level.
switch (e.Node.Depth)
{
case 0:
// Populate the first-level nodes.
PopulateTopLevelNodes(e.Node);
break;
case 1:
// Populate the second-level nodes.
PopulateChildern(e.Node);
break;
default:
// Do nothing.
break;
}

}


private void PopulateTopLevelNodes(TreeNode node)
{

Selago.BusinessLayer.Service service = new
Selago.BusinessLayer.Service();
PageList = service.GetPages();

foreach(iPage page in PageList)
{
if(page.ParentID == 0)
{
TreeNode TopLevel = new TreeNode();

TopLevel.Text = page.PageName;
TopLevel.Value = page.ID.ToString();

// Add root node to TreeView
TopLevel.PopulateOnDemand = true;
TopLevel.SelectAction =
TreeNodeSelectAction.SelectExpand;
node.ChildNodes.Add(TopLevel);

}
}
}

private void PopulateChildern(TreeNode node)
{

Selago.BusinessLayer.Service service = new
Selago.BusinessLayer.Service();
ChildrenList =
service.GetChildrenPages(Int32.Parse(node.Value));

foreach (iPage page in ChildrenList)
{


TreeNode newNode = new TreeNode();

newNode.Text = page.PageName;
newNode.Value = page.ID.ToString();

// Set additional properties for the node.
newNode.SelectAction =
TreeNodeSelectAction.SelectExpand;

// Add the new node to the ChildNodes collection of
the parent node.
node.ChildNodes.Add(newNode);

DataSet ChildrensSub = new DataSet();
int ChildrensSubCount =
service.GetChildrenPages(Int32.Parse(newNode.Value)).Count;

if (ChildrensSubCount > 0)
{
PopulateChildern(newNode);
}

}
}


protected void nodeSelect(object sender, EventArgs e)
{
javascript = "OnPageClick(" +
SubMenuTree.SelectedNode.Value + ");";
}

Andrew Badera

unread,
Dec 4, 2007, 11:13:04 AM12/4/07
to DotNetDe...@googlegroups.com
Are you trying to build the tree in Init or Load? If in Init, your controls won't have any state yet ... try moving to Load.

--Andrew Badera
Reply all
Reply to author
Forward
0 new messages