By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,262 Members | 1,128 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,262 IT Pros & Developers. It's quick & easy.

Maintaining View State For Dynamically Created Controls

P: n/a
I am building a custom control that I want to server as a container for child
controls that can be dynamically added to this control. I can persist the
child controls that are added to my custom control but can to get them to
retain view state.

Below is a striped down version of my control. It exposes one property of
type System.Web.UI.Control that the containing page my set with a dynamically
created control My custom control will then add it to its control tree and
render it to the display. The information need to recreate the control is
stored in a System.Web.UI.Triplet object. On postback, the child control is
reinstanced and given its origonal id and added to the Custom Controls
control tree and rendered to the display.

The only problem is that the ViewState for the child control is not being

Has anyone solved this puzzle???

Thanks for your help



Imports System.ComponentModel
Imports System.Web.UI

<ToolboxData("<{0}:TabMenuA runat=server></{0}:TabMenuA>")> Public Class
Inherits System.Web.UI.WebControls.WebControl

#Region "Declarations"

Private _ChildControlToRender As System.Web.UI.Control

#End Region

#Region "Properties"

<Bindable(True), Category("Data"), DefaultValue("")> Public Property
ChildControlToRender() As System.Web.UI.Control
Return _ChildControlToRender
End Get
Set(ByVal Value As System.Web.UI.Control)
_ChildControlToRender = Value
End Set
End Property

#End Region

#Region "Methods"

Protected Overrides Sub CreateChildControls()
If Not Page.IsPostBack Then
End If

End Sub
Protected Overrides Sub LoadViewState(ByVal savedState As Object)
Dim objViewStates() As Object
objViewStates = CType(savedState, Object())
Dim Trip As System.Web.UI.Triplet
Trip = objViewStates(1)
_ChildControlToRender = Activator.CreateInstance(CType(Trip.Second,
_ChildControlToRender.ID = Trip.First
End Sub

Protected Overrides Function SaveViewState() As Object
Dim objViewStates(1) As Object
Dim Trip As New System.Web.UI.Triplet
Trip.First = _ChildControlToRender.ID
Trip.Second = _ChildControlToRender.GetType
Trip.Third = Me.ID
objViewStates(1) = Trip
objViewStates(0) = MyBase.SaveViewState()
Return objViewStates
End Function

#End Region
End Class


Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
If Not Page.IsPostBack Then
Dim myButton As Button = New Button
myButton.Text = "Hello1"
myButton.ID = "ButtonA"
myButton.EnableViewState = True
ContainerControl1.ChildControlToRender = myButton
End If

End Sub

Nov 18 '05 #1
Share this question for a faster answer!
Share on Google+

This discussion thread is closed

Replies have been disabled for this discussion.