I have a treeview that is set to load on demand.
When the user clicks a node, the page is reloaded with updated info and the treeview is reset back to showing just the parent node.
I need to have it auto-expand back to the previously selected node.
I've tried the FindbyValue method but since the trees not populated, there's no value to be found.
I've tried to navigate thru expanding as I go (I have the path to the end node saved) but I can't force the treeview to expand to populate the child.
Anyway to do this???
thanks.
When the user clicks a node, the page is reloaded with updated info and the treeview is reset back to showing just the parent node.
I need to have it auto-expand back to the previously selected node.
I've tried the FindbyValue method but since the trees not populated, there's no value to be found.
I've tried to navigate thru expanding as I go (I have the path to the end node saved) but I can't force the treeview to expand to populate the child.
Anyway to do this???
thanks.
3 Answers, 1 is accepted
0
Hi John,
If the treeview is subscribed to NodeClick event, it should preserve its state after the postback, but if NavigateUrl property of the nodes is set, the page navigates and a new instance of the treeview is shown, so it's collapsed. What exactly is your case? Can you send us some sample code demonstrating your scenario? Thanks
Sincerely yours,
Yana
the Telerik team
If the treeview is subscribed to NodeClick event, it should preserve its state after the postback, but if NavigateUrl property of the nodes is set, the page navigates and a new instance of the treeview is shown, so it's collapsed. What exactly is your case? Can you send us some sample code demonstrating your scenario? Thanks
Sincerely yours,
Yana
the Telerik team
Do you want to have your say when we set our development plans?
Do you want to know when a feature you care about is added or when a bug fixed?
Explore the
Telerik Public Issue Tracking
system and vote to affect the priority of the items
0

John
Top achievements
Rank 1
answered on 14 Oct 2010, 03:26 PM
I found a way to do what I needed.
If there's a better way, please feel free to let me know.
TreeView is load on demand and nested in several containers.
Clicking on a node redirects back to same page with new parameters that displays correct info.
TreeView is dynamically expanded back to the selected node.
'*** CODE IN PAGE.ASPX
'treeview nested in panel inside pane inside splitter
<
telerik:RadPanelItem
Text
=
"Navigation"
PostBack
=
"False"
Expanded
=
"True"
>
<
Items
>
<
telerik:RadPanelItem
Value
=
"TreeTemplate"
>
<
ItemTemplate
>
<
telerik:RadTreeView
runat
=
"Server"
ID
=
"trvDocs"
Skin
=
"Web20"
OnNodeExpand
=
"trvDocs_NodeExpand"
OnNodeClick
=
"trvDocs_NodeClick"
></
telerik:RadTreeView
>
</
ItemTemplate
>
</
telerik:RadPanelItem
>
</
Items
>
</
telerik:RadPanelItem
>
'*** (partial) CODE IN PAGE.ASPX.VB
Partial Class WebForms_Page
Private trvNavigate As RadTreeView
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
trvNavigate = CType(pnlMenuItems.FindItemByValue("TreeTemplate").FindControl("trvDocs"), RadTreeView)
If Not IsPostBack Then
LoadRootNodes(trvNavigate, TreeNodeExpandMode.ServerSideCallBack)
'IF PAGE WAS CALLED BY TREEVIEW, THEN EXPAND TREE TO SELECTED ITEM
Dim sVP As String
If Request.QueryString("VPTH") Is Nothing Then
sVP = ""
Else
sVP = Request.QueryString("VPTH")
End If
If sVP <> "" Then
Dim vNodeTrail As String() = Split(sVP, "/")
Dim Trail As String
Dim sTrailSteps As String = ""
Dim istp As Integer = 0
For Each Trail In vNodeTrail
sTrailSteps &= Trail
Dim n As RadTreeNode
n = trvNavigate.FindNodeByValue(sTrailSteps)
If n Is Nothing Then
lblErr.Text = "not found: " & sTrailSteps
Else
Call PopulateNodeDynamically(n)
End If
sTrailSteps &= "/"
Next
End If
End If
End Sub
Protected Sub trvDocs_NodeExpand(ByVal sender As Object, ByVal e As RadTreeNodeEventArgs)
PopulateNodeDynamically(e.Node)
End Sub
Protected Sub trvDocs_NodeClick(ByVal sender As Object, ByVal e As RadTreeNodeEventArgs)
LoadNewDoc(trvNavigate.SelectedNode.Value.ToString)
End Sub
Protected Sub LoadRootNodes(ByVal treeView As RadTreeView, ByVal expandMode As TreeNodeExpandMode)
Dim cn As New SqlConnection
Try
OpenConnection(cn)
Dim cmd As New SqlCommand("GetRootNodes")
cmd.Connection = cn
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add(New SqlParameter("@CID", SqlDbType.Int)).Value = sPageCompanyID
Dim adapter As New SqlDataAdapter(cmd)
Dim data As New DataTable
adapter.Fill(data)
For Each row As DataRow In data.Rows
Dim node As New RadTreeNode()
node.Text = row("ParentName").ToString()
node.Value = "V" & row("ParentNo").ToString()
node.ExpandMode = expandMode
treeView.Nodes.Add(node)
Next
Catch ex As Exception
lblErr.Text = "Err: " & ex.Message & " [LoadRootNodes]"
Finally
cn.Close()
End Try
End Sub
Protected Sub PopulateNodeDynamically(ByVal e As RadTreeNode)
Dim cn As New SqlConnection
Try
Dim DocNo As String = ""
DocNo = Right(e.Value, e.Value.Trim.Length - InStrRev(e.Value, "/"))
OpenConnection(cn)
Dim cmd As New SqlCommand("GetChildren")
cmd.Connection = cn
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add(New SqlParameter("@ParentNo", SqlDbType.VarChar, 50)).Value = DocNo.Substring(1)
cmd.Parameters.Add(New SqlParameter("@CID", SqlDbType.Int)).Value = sPageCompanyID
Dim adapter As New SqlDataAdapter(cmd)
Dim data As New DataTable
adapter.Fill(data)
For Each row As DataRow In data.Rows
Dim node As New RadTreeNode()
node.Text = row("ChildName").ToString()
node.Value = e.Value.Trim & "/" & row("ChildType").ToString.Trim & row("ChildNo").ToString.Trim
node.PostBack = True
If Convert.ToInt32(row("ChildQty")) > 0 Then
node.ExpandMode = TreeNodeExpandMode.ServerSideCallBack
End If
e.Nodes.Add(node)
Next
e.Expanded = True
Catch ex As Exception
Finally
cn.Close()
End Try
End Sub
Protected Sub LoadNewDoc(ByVal vPath As String)
Dim DocNo As String = ""
DocNo = Right(vPath, vPath.Trim.Length - InStrRev(vPath, "/"))
OpenConnection(cn)
Dim cmd As New SqlCommand("GetDocInfo")
cmd.Connection = cn
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add(New SqlParameter("@DocNo", SqlDbType.VarChar, 50)).Value = DocNo.Substring(1)
cmd.Parameters.Add(New SqlParameter("@UserID", SqlDbType.Int)).Value = sUserID
Dim drDoc As SqlDataReader
drDoc = cmd.ExecuteReader()
If drDoc.Read() Then
Dim sFN As String = drDoc.Item("FileName")
Dim sID As Integer = drDoc.Item("FileID")
drDoc.Close()
Response.Redirect("page.aspx?file=" & sFN & "&ID=" & sID & "&VPTH=" & vPath)
End If
End Sub
End Class
0
Hello John,
I'm glad that you managed to find a solution, it seems correct to me.
Best wishes,
Yana
the Telerik team
I'm glad that you managed to find a solution, it seems correct to me.
Best wishes,
Yana
the Telerik team
Do you want to have your say when we set our development plans?
Do you want to know when a feature you care about is added or when a bug fixed?
Explore the
Telerik Public Issue Tracking
system and vote to affect the priority of the items