Introduction
I was trying to create a custom control that inherits from DropDownList
with required field validation. My original intention was to embed RequiredFieldValidator
on my custom drop-down-list control so that when I add a drop-down-list on my ASPX page, I don't have to re-code the RequiredFieldValidator
all the time.
When I tried to add the required field validator as a child-control of the drop-down-list, I got the "does not allow child controls" error message as shown. Seems that the out-of-the-box drop-down-list does not allow child controls to be added.
Using the Code
I always have this principal when I do programming: "The biggest error on your application is normally caused by the-easiest-to-fix section". I spent hours yesterday to get this working, and guess what....the fix is very-very simple! Here it is. The code is in VB.NET.
What you have to do is override the CreateControlCollection
method of the base class and create a new instance of it and pass the current class (Me
for VB.NET, or this
for C#).
Protected Overrides Function CreateControlCollection() As System.Web.UI.ControlCollection
Return New ControlCollection(Me)
End Function
That's it! You can then do the following:
MyBase.Controls.Add(ctrValidator)
Points of Interest
Quiet easy, huh!? If you have the same problem when inheriting from out-of-the-box controls, this will be the fix.
Hope this helps.
My name is Tommy Segoro currently working with Vivid Group in Perth, Western Australia. I also run my own hosting, web site design and development freelancing company. If you want to contact me please visit my website http://www.smallbusinesshosting.com.au.
I've been involved a lot with the customisation of Microsoft technologies such as Windows Sharepoint Services 2.0-3.0, Sharepoint Portal 2003, Microsoft Office Sharepoint Server 2007 (MOSS), Microsoft CRM and Microsoft Content Management Server (MCMS).
I currently hold Microsoft Certified Professional (MCP) and MS CRM Software Advisor certification and have been programming for almost 4 years now.