.NETGURU
Composite controls not visible at design time
Messages   Related Types
This message was discovered on microsoft.public.dotnet.framework.aspnet.buildingcontrols.

Post a new message to this list...

Peter Morris [Droopy Eyes Software]
Hi all

I have a few questions regarding composite controls

1) My composite controls are created based on a property of my control.
When the postback of a page occurs due to a button click, my
CreateChildControls() method is called before the button code is executed,
so if that button code changes the property in question it is already too
late to reflect this in the control. Is there a way to "Invalidate" my
control when this property is set so that it's child controls are recreated?

2) Dropping my component on to a WebForm reveals two behaviours which I do
not want.
2a) Firstly the control has a specific width/height, whereas I want it
to size automatically based on which of the child controls are visible.
2b) At design time, none of the child controls are visible at all

3) My final question. One property of my control is a DateTime. If I allow
data binding to this property how do I handle a null value from the data
source? I have an IsNull property, but surely the data binding will try to
bind the DateTime to null?

Thank you

--
Pete
====
Read or write articles on just about anything
http://www.HowToDoThings.com

Reply to this message...
 
    
John Saunders
"Peter Morris [Droopy Eyes Software]" <Click here to reveal e-mail address> wrote
in message news:Click here to reveal e-mail address...
[Original message clipped]


Yes. Set ChildControlsCreated to false.

[Original message clipped]

That doesn't always happen to me. What is your control derived from? Does it
set its own size?

> 2b) At design time, none of the child controls are visible at all

Composite controls should have a designer. In the GetDesignTimeHtml method,
they should cause EnsureChildControls to be called. The basic pattern is as
follows (note that I haven't tried to build this):

namespace MyControls
{
[Designer(typeof(Design.CompositeControlDesigner))]
public class CompositeControl : WebControl, INamingContainer
{
protected override ControlCollection Controls
{
get
{
EnsureChildControls();
return base.Controls;
}
}

public string PropertyThatDeterminesChildren
{
get {return (string) ViewState["propertyThatDeterminesChildren"];}
set
{
ViewState["propertyThatDeterminesChildren"] = value;
ChildControlsCreated = false;
}
}

private Label _childLabel;

public string PropertyWhichRequiresChildren
{
get
{
EnsureChildControls();
return _childLabel.Text;
}
set
{
EnsureChildControls();
_childLabel.Text = value;
}
}

protected override void CreateChildControls()
{
// Create your control hierarchy here
_childLabel = new Label();
_childLabel.ID = "childLabel";
base.Controls.Add(_childLabel); // Note: don't recurse

if (PropertyThatDeterminesChildren == "button")
{
Button btn = new Button();
btn.ID = "btn";
btn.Text = "Button";
base.Controls.Add(btn);
} else {
LinkButton lnk = new LinkButton();
lnk.ID = "lnk";
lnk.Text = "LinkButton";
base.Controls.Add(lnk);
}
}
}
}

namespace MyControls.Design
{
public class CompositeControlDesigner : ControlDesigner
{
protected override string GetDesignTimeHtml()
{
// Ensure that the controls are created
ControlCollection controls = ((CompositeControl)
Component).Controls;

// ... then
return base.GetDesignTimeHtml();
}
}
}

Your own controls would then derive from CompositeControl.

> 3) My final question. One property of my control is a DateTime. If I
allow
[Original message clipped]

When you say "null", do you mean a NULL from a database? If so, then an
exception will be thrown when an attempt is made to bind the NULL to your
DateTime property. The same will happen no matter what kind of property you
bind to, since whatever type it is (except for object), it isn't DBNull,
which is a distinct type. This is no different from any other control, so
your callers should probably do with this DateTime property whatever they
would do with a string property.

--
John Saunders
johnwsaundersiii at hotmail

Reply to this message...
 
    
Peter Morris [Droopy Eyes Software]
Hi John

I posted the information here:
http://www.howtodothings.com/showarticle.asp?article=751

Once again, thanks very much for your help!

--
Pete
====
Read or write articles on just about anything
http://www.HowToDoThings.com

Reply to this message...
 
    
Peter Morris [Droopy Eyes Software]
Hi John

Thanks for the excellent level of detail.

> That doesn't always happen to me. What is your control derived from? Does
it
> set its own size?

System.Web.UI.WebControls.WebControl, INamingContainer

It doesn't set its own size in the constructor or anything.

Seeing as I will need to do this again in the future, and will most likely
forget the details, do you mind if I post this information on my website
(where I keep all information I don't want to forget)? I'd be perfectly
happy to credit the article in your name, and provide a URL link of your
choice.

Thanks again!

--
Pete
====
Audio compression components, DIB graphics controls, FastStrings
http://www.droopyeyes.com

Read or write articles on just about anything
http://www.HowToDoThings.com

Reply to this message...
 
    
John Saunders
"Peter Morris [Droopy Eyes Software]" <Click here to reveal e-mail address> wrote
in message news:%Click here to reveal e-mail address...
[Original message clipped]

You're welcome, and I hope it actually helped!

> > That doesn't always happen to me. What is your control derived from?
Does
[Original message clipped]

Strange. The control I'm most recently working on is a composite control
which renders a Button. It's quite happy to take up only the size of the
(textless) button.

[Original message clipped]

Go ahead and post it wherever you like. I figure once it gets posted on a
newsgroup, the world owns it.

I'd suggest you include either a URL to this newsgroup discussion, or at
least a textual reference to it. That way, readers of your web site will be
able to find the discussion.
--
John Saunders
johnwsaundersiii at hotmail

Reply to this message...
 
    
Peter Morris [Droopy Eyes Software]
> You're welcome, and I hope it actually helped!

Yes, it did. It solved all of the problems I was experiencing except the
size issue.

[Original message clipped]

I remember seeing a property in the designer about disallowing resize or
something, I will try that later and see if it solves the problem.

[Original message clipped]

Thanks. I'll write it up later.

I appreciate your help!

--
Pete
====
Read or write articles on just about anything
http://www.HowToDoThings.com

Reply to this message...
 
 
System.DateTime
System.DBNull
System.Reflection.Emit.Label
System.Web.UI.ControlCollection
System.Web.UI.Design.ControlDesigner
System.Web.UI.INamingContainer
System.Web.UI.MobileControls.Label
System.Web.UI.WebControls.Button
System.Web.UI.WebControls.Label
System.Web.UI.WebControls.LinkButton
System.Web.UI.WebControls.WebControl
System.Windows.Forms.Button
System.Windows.Forms.Design.ControlDesigner
System.Windows.Forms.Label




ExamGuru IT Solutions - .Net Guru is owned and operated by ExamGuru, Inc., the man behind .Net Guru. If you're in the market for bespoke software or software consultancy, why not get him and his highly trained team to help? - www.examguru.net/ITCertification
Ad


Need Dot Net Interview Questions?
Ask ExamGuru, Inc. for advice and help on Passing .Net Interviews
.Net Projects
Best-of-breed application framework for .NET projects, developed by ExamGuru, Inc. and ExamGuru IT
Free .net Help
Commission ExamGuru, Inc. and his team for your next bespoke software project
FogBUGZ
The only bug tracking system carefully crafted with one goal in mind: helping teams create great software.
Awesome Tools
If you don't know about these, you're missing out... IT Certification Questions
IT Interview Questions
Free Oracle 10g Training
MCSE Boortcamp
Cisco Study Guides
Cheap Study Guides
Exact Questions
Dot Net Interview Questions
Oracle OCP
Cheap Travel
Designer Perfumes - Wholesale Prices
Free Programming Tutorials
 
ExamGuru IT Solutions - .Net Guru is owned and operated by ExamGuru, Inc., the man behind .Net Guru. If you're in the market for bespoke software or software consultancy, why not get him and his highly trained team to help? - www.examguru.net/ITCertification
 Copyright © ExamGuru, Inc. 2001-2006
Contact Us - Terms of Use - Privacy Policy - www.dot-net-guru.com - www.examguru.net - www.oraclesource.net - www.itinterviews.net - www.examguru.net/ITCertification