Composite control delegating databound templated features to child <asp:repeater> control

D

debartsa

Hi Everybody,

I'm creating a composite control in C# that basically renders a bunch of
webcontrols such as <asp:Label />, <asp:Repeater />, etc... as its children.

My goal is to re-use the functionality of the <asp:Repeater /> control to
allow the page developer to take advantage of the Data-bound, Templated
features the <asp:Repeater /> offers. (I'd like to avoid building that
functionality from scratch in my control).

The question is:

When the page developer using VS.NET drags my control onto an .aspx page,
I'd like the developer to be able to add his/her own template code
<ItemTemplate>, etc... and have the processing of the inline template code
and data-binding expressions delegate down to my child <asp:Repeater> for
rendering.

e.g.

<my:CompositeCtrl id="Cntrl1" runat="server">

//... The <asp:Repeater> child in my control would handle this block
....
<HeaderTemplate>Title</HeaderTemplate>
<ItemTemplate>
<li><a href="<%# DataBinder.Eval(Container.DataItem,
"URL") %>">
<%# DataBinder.Eval(Container.DataItem, "Name")
%></a></li>
</ItemTemplate>
<FooterTemplate>Footer Text</FooterTemplate>
etc...

</my:CompositeCtrl>


Is this possible?

Thanks for any help!
Sam
 
J

John Saunders

debartsa said:
Hi Everybody,

I'm creating a composite control in C# that basically renders a bunch of
webcontrols such as <asp:Label />, <asp:Repeater />, etc... as its children.

My goal is to re-use the functionality of the <asp:Repeater /> control to
allow the page developer to take advantage of the Data-bound, Templated
features the <asp:Repeater /> offers. (I'd like to avoid building that
functionality from scratch in my control).

The question is:

When the page developer using VS.NET drags my control onto an .aspx page,
I'd like the developer to be able to add his/her own template code
<ItemTemplate>, etc... and have the processing of the inline template code
and data-binding expressions delegate down to my child <asp:Repeater> for
rendering.

e.g.

<my:CompositeCtrl id="Cntrl1" runat="server">

//... The <asp:Repeater> child in my control would handle this block
...
<HeaderTemplate>Title</HeaderTemplate>
<ItemTemplate>
<li><a href="<%# DataBinder.Eval(Container.DataItem,
"URL") %>">
<%# DataBinder.Eval(Container.DataItem, "Name")
%></a></li>
</ItemTemplate>
<FooterTemplate>Footer Text</FooterTemplate>
etc...

</my:CompositeCtrl>

You could delegate the template properties by creating corresponding
properties in your own code:

public ITemplate ItemTemplate
{
get {EnsureChildControls(); return myChildRepeater.ItemTemplate;}
set {EnsureChildControls(); myChildRepeater.ItemTemplate = value;}
}

However, this won't give you any of the designer features of the Repeater
control.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,001
Messages
2,570,254
Members
46,849
Latest member
Fira

Latest Threads

Top