Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > ASP .Net Web Controls > Custom Control, ITemplate and nested bound controls

Reply
Thread Tools

Custom Control, ITemplate and nested bound controls

 
 
Brook
Guest
Posts: n/a
 
      03-17-2008
Hi Everyone,

I've been interested in creating a custom control that wraps up a few common
UI elements and some styling. But, in order to make this earier to
understand, let's say my control is just a posh panel. It has curvy edges
rather than straight ones.

Now i have written a custom control which allows me to do the following in
aspx code :

<cc1:CurvyPanel runat="server">
<Content>
<asp:Label runat="server" Text="Hello World!"></asp:Label>
</Content>
</cc1:CurvyPanel>

The control is visible at runtime and design time.

However, when i try something a little more adventurous such as:

<cc1:CurvyPanel runat="server">
<Content>
<asp:Repeater ID="rptYears" runat="server">
<ItemTemplate>
<a href="<%#Eval("link") %>"><%# Eval("name")
%></a>
</ItemTemplate>
</asp:Repeater>
</Content>
</cc1:CurbyPanel>

Now, when i try to bind some data to my embedded repeater from my parent
page, it gives me the error

"InvalidOperationException was unhandled by user code
Databinding methods such as Eval(), XPath(), and Bind() can only be used in
the context of a databound control."

So, I was hoping my "curvypanel" would behave in the same way as a normal
..NET panel in terms of allowing content inside it to be independantly bound
to a set of data... so either it doesn't allow this or ive done something
wrong.

Can anyone help me by clarifying whether what im trying to do is possible?
and if so, provide any input on how to go about it?

thanks,
Andrew


 
Reply With Quote
 
 
 
 
Peter Bucher [MVP]
Guest
Posts: n/a
 
      03-17-2008
Hello Andrew

> "InvalidOperationException was unhandled by user code
> Databinding methods such as Eval(), XPath(), and Bind() can only be used
> in
> the context of a databound control."

Look what google says about that error message.

I guess, its for the reason, that your control doesnt represent a databound
control.
Anyway, that should work:

<%#DataBinder.Eval(Container.DataItem, "field").ToString()%>

--
Gruss, Peter Bucher
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
http://www.aspnetzone.de/blogs/peterbucher/ - Auf den Spuren von .NET

 
Reply With Quote
 
 
 
 
Brook
Guest
Posts: n/a
 
      03-18-2008
Thanks Peter - i made the changes and the control no longer throws the error.
In fact the control works in every way i'd expect.

The only thing that i wonder about now, is why my control is different to
say a normal aspanel. Does an aspanel perhaps inherit from some classes
that allow child controls to bind to their data sources using Eval?
Afterall, i don't want to bind any data to my control, i want to bind to the
child controls that get added into the controls ITemplate

At the moment, my custom control is inheriting from WebControl, and
implementing INamingContainer

thanks,
Andrew

"Peter Bucher [MVP]" wrote:

> Hello Andrew
>
> > "InvalidOperationException was unhandled by user code
> > Databinding methods such as Eval(), XPath(), and Bind() can only be used
> > in
> > the context of a databound control."

> Look what google says about that error message.
>
> I guess, its for the reason, that your control doesnt represent a databound
> control.
> Anyway, that should work:
>
> <%#DataBinder.Eval(Container.DataItem, "field").ToString()%>
>
> --
> Gruss, Peter Bucher
> Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland
> http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
> http://www.aspnetzone.de/blogs/peterbucher/ - Auf den Spuren von .NET
>
>

 
Reply With Quote
 
Teemu Keiski
Guest
Posts: n/a
 
      03-20-2008
"Databinding methods such as Eval(), XPath(), and Bind() can only be used in
the context of a databound control"

Sounds familiar error to me.

How's the template's instantiation in the control - regarding how it gets
added to Controls collection? And is template container specified
(TemplateContainer attribute)?

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


"Peter Bucher [MVP]" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> Hello Andrew
>
>> "InvalidOperationException was unhandled by user code
>> Databinding methods such as Eval(), XPath(), and Bind() can only be used
>> in
>> the context of a databound control."

> Look what google says about that error message.
>
> I guess, its for the reason, that your control doesnt represent a
> databound control.
> Anyway, that should work:
>
> <%#DataBinder.Eval(Container.DataItem, "field").ToString()%>
>
> --
> Gruss, Peter Bucher
> Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland
> http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
> http://www.aspnetzone.de/blogs/peterbucher/ - Auf den Spuren von .NET



 
Reply With Quote
 
Brook
Guest
Posts: n/a
 
      03-25-2008
Hi - i think this is the code you're interested in seeing :-

private ITemplate _PanelContent;

private PlaceHolder phContent = new PlaceHolder();

[PersistenceMode(PersistenceMode.InnerProperty),
TemplateInstance(TemplateInstance.Single),
TemplateContainer(typeof(TemplateControl))]
public ITemplate Content
{
get { return _PanelContent; }
set { _PanelContent = value; }
}


protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if (_PanelContent != null)
{

_PanelContent.InstantiateIn(phContent);
}
EnsureChildControls();
}



thanks,
Andrew


"Teemu Keiski" wrote:

> "Databinding methods such as Eval(), XPath(), and Bind() can only be used in
> the context of a databound control"
>
> Sounds familiar error to me.
>
> How's the template's instantiation in the control - regarding how it gets
> added to Controls collection? And is template container specified
> (TemplateContainer attribute)?
>
> --
> Teemu Keiski
> AspInsider, ASP.NET MVP
> http://blogs.aspadvice.com/joteke
> http://teemukeiski.net
>
>
> "Peter Bucher [MVP]" <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed)...
> > Hello Andrew
> >
> >> "InvalidOperationException was unhandled by user code
> >> Databinding methods such as Eval(), XPath(), and Bind() can only be used
> >> in
> >> the context of a databound control."

> > Look what google says about that error message.
> >
> > I guess, its for the reason, that your control doesnt represent a
> > databound control.
> > Anyway, that should work:
> >
> > <%#DataBinder.Eval(Container.DataItem, "field").ToString()%>
> >
> > --
> > Gruss, Peter Bucher
> > Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland
> > http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
> > http://www.aspnetzone.de/blogs/peterbucher/ - Auf den Spuren von .NET

>
>
>

 
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
asp.net webpart access to data bound to control using ITemplate cl cindy ASP .Net Web Controls 0 12-09-2009 11:47 PM
asp.net webpart access to data bound to control using ITemplate cl cindy ASP .Net 0 12-09-2009 11:30 PM
Programmaticly load a custom UserControl with in a custom class which implements an ITemplate LaptopHeaven ASP .Net 0 10-05-2006 12:36 PM
Getting lower-bound and upper-bound of strings input Rhiner Dan C++ 1 03-27-2005 02:03 AM
Itemplate not accepting postback in data-bound templated control cosine... zero ASP .Net 0 06-09-2004 06:49 PM



Advertisments