Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > ASP .Net Building Controls > Control.Controls bug? Control's child controls missing at the run time.

Reply
Thread Tools

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

 
 
sinelnikov.andrei@gmail.com
Guest
Posts: n/a
 
      12-07-2005
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=""javascriptopUpCalendar(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!

 
Reply With Quote
 
 
 
 
Teemu Keiski
Guest
Posts: n/a
 
      12-08-2005
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


<> wrote in message
news: 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=""javascriptopUpCalendar(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!
>



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Control.Controls bug? Control's child controls missing at the run time. sinelnikov.andrei@gmail.com ASP .Net Web Controls 1 12-08-2005 06:46 AM
HELP! Child controls of child controls not visible to web app lisa@starways.net ASP .Net Building Controls 0 05-05-2005 09:14 PM
Mixing child properties and child controls - how? Donal McWeeney ASP .Net Web Controls 3 02-14-2005 02:51 AM
How do I: Main thread spawn child threads, which child processes...control those child processes? Jeff Rodriguez C Programming 23 12-09-2003 11:06 PM
How to force the child controls OnClick event before the parent controls CreateChildControls method? Arulraja ASP .Net 3 10-17-2003 04:22 PM



Advertisments