Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   ASP .Net Building Controls (http://www.velocityreviews.com/forums/f59-asp-net-building-controls.html)
-   -   Control.Controls bug? Control's child controls missing at the run time. (http://www.velocityreviews.com/forums/t758069-control-controls-bug-controls-child-controls-missing-at-the-run-time.html)

sinelnikov.andrei@gmail.com 12-07-2005 09:46 PM

Control.Controls bug? Control's child controls missing at the run time.
 
Hello,

..NET 1.1/VB.NET:

I have a custom web control

Public Class DatePicker
Inherits Control
Implements INamingContainer

In the CreateChildControls I adding some controls to it:

Protected Overrides Sub CreateChildControls()
placeJavascript()
MyBase.Controls.Add(New LiteralControl("<table
class='Calendar'><tr><td>"))
Dim txtTextBox As New System.Web.UI.WebControls.TextBox

With txtTextBox
If Len(m_ControlCssClass) > 0 Then
.CssClass = m_ControlCssClass
End If
If Not (m_text = "") Then
.Text = m_text
End If
If Not (m_Css = "") Then
.CssClass = m_Css
End If
.ID = "foo"
.Width = Unit.Pixel(80)
.MaxLength = Me.DateType.Length
End With

MyBase.Controls.Add(txtTextBox)
MyBase.Controls.Add(New LiteralControl( _
"<img border='0' class='ImgNoSpace' alt='Calendar' " & _
"src='" & imgDirectory + m_calendar & "' " & _
"onclick=""javascript:popUpCalendar(document.a ll." &
Me.ClientID & "_foo,document.all." & _
Me.ClientID & "_foo, '" & m_DateType & "');"">"))
MyBase.Controls.Add(New LiteralControl("</td></tr></table>"))
End Sub

Now, then I trying to do For Each ctl As Control In myControl.Controls
on my page:

Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
' Call base load before we do any work at this level
MyBase.OnLoad(e)

dpFrom.ValidatingControlClientID = btnSearch.ClientID
dpThrough.ValidatingControlClientID = btnSearch.ClientID

For Each ctl As Control In dpFrom.Controls
If TypeOf ctl Is TextBox Then
dpThrough.SecondDateControlClientID = ctl.ClientID
End If
Next

For Each ctl As Control In dpThrough.Controls
If TypeOf ctl Is TextBox Then
dpFrom.SecondDateControlClientID = ctl.ClientID
End If
Next

End Sub

I am getting nothing...

So, if I set the breakpoint on the For Each ctl As Control In
dpFrom.Controls and QuickWatch (or just Watch) dpFrom.Controls - I will
see Count = 0.

Now - interesting part: If I QuickWatch (or just Watch) just dpFrom and
will expand Controls property - I will see Count = 4.

And after that - if I QuickWatch (or just Watch) dpFrom.Controls - I
will see Count = 4.

I beleive that that is a bug.

So, how I can get my control's child controls on the page? Should I do
something differently then I adding child controls in my web control?

Help! :-)


Teemu Keiski 12-08-2005 06:47 AM

Re: Control.Controls bug? Control's child controls missing at the run time.
 
Replied on *.webcontrols

***

Hi,

CreateChildControls will not be called unless something in your control
invokes either FindControl (normally on postbacking control this is
initiated on postback) or your control passes to PreRender phase, where
controls are created automatically. E.g something should signal creating
them.

You can get accessing the Controls collection to cause EnsureChildControls
to be called if youy override Controls property

Public Overrides Controls As ControlsCollection
Get
EnsureChildControls()
Return MyBAse.Controls
End Get
End Property

With this approach child controls will be created when you loop though the
collection.

--
Teemu Keiski
ASP.NET MVP, AspInsider
Finland, EU
http://blogs.aspadvice.com/joteke


<sinelnikov.andrei@gmail.com> wrote in message
news:1133991965.027536.149070@o13g2000cwo.googlegr oups.com...
> Hello,
>
> .NET 1.1/VB.NET:
>
> I have a custom web control
>
> Public Class DatePicker
> Inherits Control
> Implements INamingContainer
>
> In the CreateChildControls I adding some controls to it:
>
> Protected Overrides Sub CreateChildControls()
> placeJavascript()
> MyBase.Controls.Add(New LiteralControl("<table
> class='Calendar'><tr><td>"))
> Dim txtTextBox As New System.Web.UI.WebControls.TextBox
>
> With txtTextBox
> If Len(m_ControlCssClass) > 0 Then
> .CssClass = m_ControlCssClass
> End If
> If Not (m_text = "") Then
> .Text = m_text
> End If
> If Not (m_Css = "") Then
> .CssClass = m_Css
> End If
> .ID = "foo"
> .Width = Unit.Pixel(80)
> .MaxLength = Me.DateType.Length
> End With
>
> MyBase.Controls.Add(txtTextBox)
> MyBase.Controls.Add(New LiteralControl( _
> "<img border='0' class='ImgNoSpace' alt='Calendar' " & _
> "src='" & imgDirectory + m_calendar & "' " & _
> "onclick=""javascript:popUpCalendar(document.a ll." &
> Me.ClientID & "_foo,document.all." & _
> Me.ClientID & "_foo, '" & m_DateType & "');"">"))
> MyBase.Controls.Add(New LiteralControl("</td></tr></table>"))
> End Sub
>
> Now, then I trying to do For Each ctl As Control In myControl.Controls
> on my page:
>
> Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
> ' Call base load before we do any work at this level
> MyBase.OnLoad(e)
>
> dpFrom.ValidatingControlClientID = btnSearch.ClientID
> dpThrough.ValidatingControlClientID = btnSearch.ClientID
>
> For Each ctl As Control In dpFrom.Controls
> If TypeOf ctl Is TextBox Then
> dpThrough.SecondDateControlClientID = ctl.ClientID
> End If
> Next
>
> For Each ctl As Control In dpThrough.Controls
> If TypeOf ctl Is TextBox Then
> dpFrom.SecondDateControlClientID = ctl.ClientID
> End If
> Next
>
> End Sub
>
> I am getting nothing...
>
> So, if I set the breakpoint on the For Each ctl As Control In
> dpFrom.Controls and QuickWatch (or just Watch) dpFrom.Controls - I will
> see Count = 0.
>
> Now - interesting part: If I QuickWatch (or just Watch) just dpFrom and
> will expand Controls property - I will see Count = 4.
>
> And after that - if I QuickWatch (or just Watch) dpFrom.Controls - I
> will see Count = 4.
>
> I beleive that that is a bug.
>
> So, how I can get my control's child controls on the page? Should I do
> something differently then I adding child controls in my web control?
>
> Help! :-)
>





All times are GMT. The time now is 01:00 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.