Dynamic load User Control open another User Control

2 posts, 0 answers
  1. Jan
    Jan avatar
    4 posts
    Member since:
    Sep 2011

    Posted 10 Sep 2012 Link to this post

    Hello,

    How can one from a UserControl which dynamically created, close itself and open another UserControl dynamically?

    Update:I solved this after some searching. I have updated my post with code that worked for me. It is not tidy. Someone may have a smarter solution?

    default.aspx
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <head runat="server">
        <title></title>
        <telerik:RadStyleSheetManager ID="RadStyleSheetManager1" runat="server" />
    </head>
    <body>
        <form id="form1" runat="server">
            <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
                <Scripts>
                    <%--Needed for JavaScript IntelliSense in VS2010--%>
                    <%--For VS2008 replace RadScriptManager with ScriptManager--%>
                    <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" />
                    <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" />
                    <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryInclude.js" />
                </Scripts>
            </telerik:RadScriptManager>
            <script type="text/javascript">
                //Put your JavaScript code here.
            </script>
            <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
                <AjaxSettings>
                    <telerik:AjaxSetting AjaxControlID="RibbonBarButton1">
                        <UpdatedControls>
                            <telerik:AjaxUpdatedControl ControlID="PlaceHolder1" />
                            <telerik:AjaxUpdatedControl ControlID="hf" />
                        </UpdatedControls>
                    </telerik:AjaxSetting>
                    <telerik:AjaxSetting AjaxControlID="RibbonBarButton2">
                        <UpdatedControls>
                            <telerik:AjaxUpdatedControl ControlID="PlaceHolder1" LoadingPanelID="RadAjaxLoadingPanel1" />
                            <telerik:AjaxUpdatedControl ControlID="hf" />
                        </UpdatedControls>
                    </telerik:AjaxSetting>
                </AjaxSettings>
            </telerik:RadAjaxManager>
            <div>
     
     
                <telerik:RadRibbonBar ID="RadRibbonBar1" runat="server" Width="900px" Style="max-width: 900px;" Skin="Office2010Silver" EnableMinimizing="true">
                    <telerik:RibbonBarTab Text="UC">
                        <telerik:RibbonBarGroup Text="UC1" ID="RibbonBarGroup1">
                            <Items>
     
                                <telerik:RibbonBarButton Size="Large" Text="UC1" ImageUrlLarge="/images/icons/docs_32.png" ID="RibbonBarButton1" />
     
                            </Items>
                        </telerik:RibbonBarGroup>
                        <telerik:RibbonBarGroup Text="UC2" ID="RibbonBarGroup2">
                            <Items>
     
                                <telerik:RibbonBarButton Size="Large" Text="UC2" ImageUrlLarge="/images/icons/docs_32.png" ID="RibbonBarButton2" />
     
                            </Items>
                        </telerik:RibbonBarGroup>
                    </telerik:RibbonBarTab>
                </telerik:RadRibbonBar>
     
     
     
                <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
            </div>
            <asp:Label ID="hf" Text="" runat="server" Visible="false" />
        </form>
    </body>
    </html>


    default.aspx.vb
    Imports Telerik.Web.UI
     
    Partial Class _Default
        Inherits System.Web.UI.Page
     
     
        Protected Sub RadRibbonBar1_ButtonClick(sender As Object, e As RibbonBarButtonClickEventArgs) Handles RadRibbonBar1.ButtonClick
     
            If e.Button.ID.ToString = "RibbonBarButton1" Then
                LoadUserControl("UC1")
            ElseIf e.Button.ID.ToString = "RibbonBarButton2" Then
                LoadUserControl("UC2")
            End If
     
                End Sub
     
        Public Sub LoadUserControl(ByVal userControl As String)
     
            hf.Text = userControl
     
            PlaceHolder1.Controls.Clear()
     
            Dim wuc As Web.UI.UserControl = CType(LoadControl("~/" & userControl & ".ascx"), Web.UI.UserControl)
            wuc.ID = userControl
            PlaceHolder1.Controls.Add(wuc)
     
        End Sub
     
     
     
     
        Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
     
            If Page.IsPostBack Then
     
                If hf.Text.Length > 2 Then
     
                    Dim wuc As Web.UI.UserControl = CType(LoadControl("~/" & hf.Text & ".ascx"), Web.UI.UserControl)
     
                    wuc.ID = hf.Text
                    wuc.Visible = False
                    PlaceHolder1.Controls.Add(wuc)
                End If
            End If
     
        End Sub
    End Class


    UC1.ascx
    <%@ Control Language="VB" AutoEventWireup="false" CodeFile="UC1.ascx.vb" Inherits="UC1" %>
     
    UC1<br />
    <asp:Button ID="Button1" runat="server" Text="Open UC2" />
    UC1.ascx.vb
    Partial Class UC1
        Inherits System.Web.UI.UserControl
     
        Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            ' show the other control
            Dim wuc As Web.UI.UserControl = CType(LoadControl("~/UC2.ascx"), Web.UI.UserControl)
            Dim holder As PlaceHolder = CType(ControlExtensions.FindControlRecursive(Page, "PlaceHolder1"), PlaceHolder)
     
            wuc.ID = "UC2"
            wuc.Visible = True
     
            holder.Controls.Add(wuc)
     
            Dim hf As Label = CType(ControlExtensions.FindControlRecursive(Page, "hf"), Label)
            hf.Text = "UC2"
        End Sub
    End Class

    UC2.ascx
    <%@ Control Language="VB" AutoEventWireup="false" CodeFile="UC2.ascx.vb" Inherits="UC2" %>
     
    UC2<br />
    <asp:Button ID="Button1" runat="server" Text="Open UC1" />
    UC2.ascx.vb
    Partial Class UC2
        Inherits System.Web.UI.UserControl
     
        Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            ' show the other control
            Dim wuc As Web.UI.UserControl = CType(LoadControl("~/UC1.ascx"), Web.UI.UserControl)
            Dim holder As PlaceHolder = CType(ControlExtensions.FindControlRecursive(Page, "PlaceHolder1"), PlaceHolder)
     
            wuc.ID = "UC1"
            wuc.Visible = True
     
            holder.Controls.Add(wuc)
     
            Dim hf As Label = CType(ControlExtensions.FindControlRecursive(Page, "hf"), Label)
            hf.Text = "UC1"
        End Sub
    End Class

    ControlExtensions.vb
    Imports Microsoft.VisualBasic
     
    Public Class ControlExtensions
     
        ''' <summary>
        ''' recursively finds a child control of the specified parent.
        ''' </summary>
        ''' <param name="control"></param>
        ''' <param name="id"></param>
        ''' <returns></returns>
        Public Shared Function FindControlRecursive(ByVal control As Control, ByVal id As String) As Control
            If control Is Nothing Then
                Return Nothing
            End If
     
            'try to find the control at the current level
            Dim ctrl As Control = control.FindControl(id)
     
            If ctrl Is Nothing Then
                'search the children
                For Each child As Control In control.Controls
                    ctrl = FindControlRecursive(child, id)
                    If Not ctrl Is Nothing Then
                        Exit For
                    End If
                Next child
            End If
     
            Return ctrl
        End Function
     
     
    End Class


    /Janne
  2. Maria Ilieva
    Admin
    Maria Ilieva avatar
    4017 posts

    Posted 13 Sep 2012 Link to this post

    Hi Jan,

    Thank you for sharing your solution for this scenario.

     I'm sure it will be very helpful for the community.

    Greetings,
    Maria Ilieva
    the Telerik team
    If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
  3. UI for ASP.NET Ajax is Ready for VS 2017
Back to Top