Hi,
I'm trying to get RadTreeView working with user controls and it's giving me hard time.
I've put RadTreeView control into user control, then in control Load event I register tree view into script manager to enable async postbacks. Everything works great, nodes are loading on demand (ServerSideCallback), click event gets fired as it should.
Then I needed to put this UserControl into another UserControl, together with RadGrid and RadListView. I've handled all events as I should, including SelectedNodeChanged event, that my first user control raises when node click occurs (remember: first user control works all right). Now I'm not getting NodeClick event from TreeView. Why is that? If I remove ScriptManager registration from first user control, event gets fired, but it causes full postbacks and I need to put those controls in UpdatePanel.
How can I achieve this? Is there any reason why single UserControl works, and UserControl inside UserControl does not raises events properly?
Here is code of first user control (the one with tree view):
Public Event NodeExpand As EventHandler(Of ProductTreeNodeExpandEventArgs)
Public Event SelectedNodeChange As EventHandler
Public ReadOnly Property SelectedNode As Integer?
Get
If (treeProductTree.SelectedNode Is Nothing) Then
Return Nothing
End If
Return CInt(treeProductTree.SelectedNode.Value)
End Get
End Property
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ScriptManager.GetCurrent(Me.Page).RegisterAsyncPostBackControl(Me.treeProductTree)
End Sub
Public Sub SetBaseNodes(ByVal nodes As IEnumerable(Of BusinessLayer.Wrappers.Node))
Dim radNodes = CreateRadTreeNodes(New List(Of BusinessLayer.Wrappers.Node)(nodes))
For Each node As RadTreeNode In radNodes
treeProductTree.Nodes.Add(node)
Next
End Sub
Protected Sub ProductTree_NodeExpand(ByVal sender As Object, ByVal e As RadTreeNodeEventArgs) _
Handles treeProductTree.NodeExpand
Dim nodeId As Integer = CInt(e.Node.Value)
Dim evetArgs = New ProductTreeNodeExpandEventArgs(nodeId)
RaiseEvent NodeExpand(Me, evetArgs)
Dim results = CreateRadTreeNodes(From n In evetArgs.ChildNodes
Where n.NodeParentId = nodeId
Select n)
For Each node As RadTreeNode In results
e.Node.Nodes.Add(node)
Next
End Sub
Protected Sub ProductTree_OnNodeClick(ByVal sender As Object, ByVal e As RadTreeNodeEventArgs) _
Handles treeProductTree.NodeClick
RaiseEvent SelectedNodeChange(Me, New System.EventArgs())
End Sub
Protected Function CreateRadTreeNodes(ByRef treeNodes As IEnumerable(Of BusinessLayer.Wrappers.Node)) As IEnumerable(Of RadTreeNode)
Dim resultList As List(Of RadTreeNode) = New List(Of RadTreeNode)()
For Each node As BusinessLayer.Wrappers.Node In treeNodes
Dim newNode As RadTreeNode = New RadTreeNode(node.NodeName, node.NodeId.ToString())
newNode.PostBack = True
If (node.ChildCount > 0) Then
newNode.ExpandMode = TreeNodeExpandMode.ServerSideCallBack
Else
newNode.ExpandMode = Nothing
End If
resultList.Add(newNode)
Next
Return resultList
End Function
Here is code of second user control:
Thanks in advance,
Pako