Treeview, loosing selected node after navigate, need help from

F

Falcula

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 + ");";
}
 
S

Scott Roberts

Falcula said:
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.


The selected node is stored in the viewstate. Viewstate is only used on
postbacks, not redirects. So when you redirect the user to a new page, the
viewstate is not used on the new page and that's why the selected node is
"lost".

If you want to "remember" the selected node you'll need to pass it in the
query string, post data, or keep it on the server somehow (e.g. session).
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,535
Members
45,007
Latest member
obedient dusk

Latest Threads

Top