The other day I was working on a code behind form and I needed to dynamically load a UserControl and access its properties. I was stumped, but with a little help from the codejunkies at aspnextgen.com I was able to move on. Here is a little sample to demonstrate this technique.
This sample consists of 3 pages:
- default.aspx -- the standard ASP.NET page
- cbDefault.vb -- the codebehind page for default.aspx
- ucHeading.ascx -- a usercontrol with a property called page heading.
default.aspx simply has a panel object as a placeholder, and references the code behind file.
<%@ Page EnableSessionState="false" explicit="true" strict="true" MaintainState="false" inherits="cbDefault" src="cbDefault.vb"%>
<body bgcolor="#FFFFFF" >
<asp:panel id="pnlHeading" runat="server" />
ucHeading has a single property called PageHeading. PageHeading is a string that is used to display the heading of the page for the web surfer.
Private _pageheading as String = ""
Public Property PageHeading As String
_pageheading = value
cdDefault.vb is the code behind file for default.aspx. It contains the meat of this demo. The logic of
- Load the UserControl
- Get the type of UserControl
- Get access to the property "
- Set the property "
- Add the UserControl to the panel object on
Option Strict On
Option Explicit On
Public Class cbDefault : Inherits Page
Public pnlHeading as Panel
Public Sub Page_Load(Src As Object, E As EventArgs)
' Load the control
Dim myUC as UserControl = LoadControl("ucHeading.ascx")
' Set the Usercontrol Type
Dim ucType as Type = myUC.GetType()
' Get access to the property
Dim ucPageHeadingProperty as PropertyInfo = ucType.GetProperty("PageHeading")
' Set the property
ucPageHeadingProperty.SetValue(myUC,"Access a Usercontrol from Code Behind",Nothing)
pnlHeading.Controls.Add ( myUC )