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
default.aspx.vb
UC1.ascx
UC1.ascx.vb
UC2.ascx
UC2.ascx.vb
ControlExtensions.vb
/Janne
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"><html xmlns="http://www.w3.org/1999/xhtml"><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.UIPartial 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 SubEnd ClassUC1.ascx
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="UC1.ascx.vb" Inherits="UC1" %>UC1<br /><asp:Button ID="Button1" runat="server" Text="Open UC2" />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 SubEnd ClassUC2.ascx
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="UC2.ascx.vb" Inherits="UC2" %>UC2<br /><asp:Button ID="Button1" runat="server" Text="Open UC1" />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 SubEnd ClassControlExtensions.vb
Imports Microsoft.VisualBasicPublic 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 FunctionEnd Class/Janne