473,748 Members | 10,539 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Databinder.eval ( ) mystification

a general question...
I'm a bit mystified by Databinder.eval (object, Colname, [format])

if controls can be bound to their individual data sources within the load
event of the page...
why would we ever use this quite inelegant OO code wrapped in #<% %> inside
the markup?

secondly:
sometimes you see simliar code inside the markup without calls to
Databinder.eval that everyone says avoid as it uses reflection...wh at is that
second form?

finally:
is it a question of elegance/inelegance, or are there things that
Databinder.eval () can do that can't be done any other way in code behind.

Thanks in advance and regards,
CharlesA
Jan 19 '06 #1
4 7349
Controls can't be bound to their values in Page_Load during a databound
operation - specifically what Databinder.Eval is meant to do. They can be
set in the ItemDataBound event however.

The 2nd form is to cast the Container.DataI tem to the type of the underlying
datasource. So if you are binding to a DataSet, DataTable or DataView, the
underlying row type is DataRowView, which you can use to do:

c#
((System.Data.D ataRowView)Cont ainer.DataItem)["FirstName"]
vb.net
ctype(Container .DataItem, System.Data.Dat aRowView)("Firs tName")

if you were binding to a collection of "User", you would cast it to "User"

DataBinder.Eval DOES use reflection. It DOES cause a performance hit. BUT,
it's implementation agnostic of how your business layer is implemented.
DataBinder.Eval doesn't care if you are using a rich domain model or table
modules (ie, datasets). It let's you change some of your business layer/data
access layer without needing to also change your presentation layer. In
that, it's absolutely wonderful.

I would recommend that you always use DataBinder.Eval , unless you've done
some specific profiling and found it to be a performance hog in your
scenario. Otherwise it's a micro-optimization which sacrifices some nice
low-coupling.

Karl

--
http://www.openmymind.net/

"CharlesA" <Ch******@discu ssions.microsof t.com> wrote in message
news:4F******** *************** ***********@mic rosoft.com...
a general question...
I'm a bit mystified by Databinder.eval (object, Colname, [format])

if controls can be bound to their individual data sources within the load
event of the page...
why would we ever use this quite inelegant OO code wrapped in #<% %>
inside
the markup?

secondly:
sometimes you see simliar code inside the markup without calls to
Databinder.eval that everyone says avoid as it uses reflection...wh at is
that
second form?

finally:
is it a question of elegance/inelegance, or are there things that
Databinder.eval () can do that can't be done any other way in code behind.

Thanks in advance and regards,
CharlesA

Jan 19 '06 #2
Thanks Karl!
I got very nearly all of that (thanks especially for reminding me that the
second form just didn't have the databinder.eval and only the
container.datai tem) and I particularly got the casting bit if you use your
own custom objects...

however you wrote (and I didn't really get this):
Controls can't be bound to their values in Page_Load during a databound
operation - specifically what Databinder.Eval is meant to do. They can be
set in the ItemDataBound event however.
and I'm not sure what that paragraph means, could you elaborate a bit more
please?

I know that the itemdatabound event is called after the ItemCreated event
for the DataGridItem, but I thought all controls could have a data source if
they had runat="server"

Thanks again
Regards
CharlesA
Jan 19 '06 #3
well, if you have:

<asp:literal id="FirstName" runat="server" />
sure you can go in Page_Load and do:

FirstName.Text = Whatever;

but if that's in a bound control, ala:
<ItemTemplate >
<asp:literal id="FirstName" runat="server" />
</ItemTemplate>
you can't do the same thing in Page_Load

FirstName doesn't exist in the context of the page, only as a child control
of your repeater/datagrid/datalist.

Your only 2 choices is to do:
<asp:literal id="FirstName" runat="server"> <%#
DataBinder.Eval (Container...)% ></asp:literal>

or hook into the ItemDataBound and do (pseudo code)

if e.Item.itemType = Item orelse e.Item.ITemType = Alternatingitem then
dim firstName as Literal = e.Item.FindCont rols("FirstName ")
firstName.Text = ctype(e.Item.Da taItem, DataRowVIew)("F irstName") 'or
you could use DataBinder.Eval in here as well)
end if

between the two solutions, the %# is way simpler, and I'd only go into
ItemDataBound if there was some more complex logic to do.

The point is, you can't do this during Page_Load, because the datasource
isn't applied to the parent control (repeater/datalist/datagrid) during
page_load but rather during databinding..

Karl

--
MY ASP.Net tutorials
http://www.openmymind.net/
"CharlesA" <Ch******@discu ssions.microsof t.com> wrote in message
news:C9******** *************** ***********@mic rosoft.com...
Thanks Karl!
I got very nearly all of that (thanks especially for reminding me that the
second form just didn't have the databinder.eval and only the
container.datai tem) and I particularly got the casting bit if you use your
own custom objects...

however you wrote (and I didn't really get this):
Controls can't be bound to their values in Page_Load during a databound
operation - specifically what Databinder.Eval is meant to do. They can be
set in the ItemDataBound event however.
and I'm not sure what that paragraph means, could you elaborate a bit more
please?

I know that the itemdatabound event is called after the ItemCreated event
for the DataGridItem, but I thought all controls could have a data source
if
they had runat="server"

Thanks again
Regards
CharlesA

Jan 19 '06 #4
Karl
you're a top man!
Thanks for that thorough and great explanation, it's cleared a big piece of
confusion for me!

thanks again and warm regards
CharlesA
Jan 19 '06 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
3813
by: Michelle Keys | last post by:
Subject: DataBinder.Eval Error! Server Error in '/MSPOS' Application. ------------------------------------------------------------------------ -------- DataBinder.Eval: 'System.Data.Common.DbDataRecord' does not contain a property with the name REPORTTO. Description: An unhandled exception occurred during the execution of the
2
2045
by: dm_dal | last post by:
I have a control on my webform that I am binding to a dataset. The issue is, the field value in the dataset is encrypted and I am trying to decrypt it during the binding process: Example: <asp:Lable ID="myLable Text='<%# myComponent.Decrypt(DataBinder.Eval(myDataSet, "Tables.DefaultView..MyField")) '></asp:Label>
5
724
by: bg | last post by:
Hi! How do I check if "date" exists before using that code? I've built a RSSreader and sometimes there's a date in it and sometimes not. How can I check if it exists to avoid crash (DataBinder.Eval: 'System.Data.DataRowView' does not contain a property with the name date) <asp:DataGrid id="RssNewsGrid"
4
2490
by: Søren Lund | last post by:
Hello, I am trying to bind a DataGrid with some data from a DataSet which contains fields in the form "group.fieldname". I am certain that my data source contains the field but I cannot get my head around which syntax to use when specifying which field to bind to the DataGrid. I have tried <%# DataBinder.Eval( Container.DataItem, "Group.FieldName" ) %>
1
2240
by: Mike Lerch | last post by:
Pretty much, TSIA, but I'll expand a bit: I'm still trying to get my head around the n-tier approach to web design. It seems to me that when you use DataBinder.Eval in the ASPX that your tiers aren't fully separated. If you're displaying data in a DataGrid, is it appropriate to define a label in your template column as <asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "MyField")%>' /> or is it better to do that...
2
20684
by: jack | last post by:
Hello, I have a date in a SQL Database and want to use the dateformat tools to format the output. I am now using the Month, Day, and Year to do it now. I want to change: Released Date: <%#Month(DataBinder.Eval(Container.DataItem, "ProdDate")) & "/" & Day(DataBinder.Eval(Container.DataItem, "ProdDate")) & "/" & Year(DataBinder.Eval(Container.DataItem, "ProdDate")) %><BR><BR>
3
2269
by: Eric Newton | last post by:
Given databinding an array of System.Version types: Given that "SomeObject" type has a Version property: public class SomeObject { public Version Version { get; } public string Description { get; } }
1
2009
by: Nathan Sokalski | last post by:
I want to make an email link using databinding. I am able to get and display the email address from the database it is stored in using databinding as follows: <asp:HyperLink id="lnkEmail1" runat="server" NavigateUrl='<%# DataBinder.Eval(Container, "DataItem.email") %>' Target="_blank"><%# DataBinder.Eval(Container, "DataItem.email") %></asp:HyperLink> However, you will notice that because the NavigateUrl attribute is the same as the...
1
2169
by: RobASPNewGuy | last post by:
Hi, I'm new to this forum and hope I can get some help. I would like to make life easier by combining a appSetting (global variable set in the web.config file) and DataBinder.Eval to create a dynamic link to an image src I have been trying alot of different variables, searching the net but no luck yet getting a combo that works. The following code works but I want to change out the "http://localhost/RobAudioVideo/images/" with a call to an...
0
8991
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
9548
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
9374
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
9325
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
1
6796
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
6076
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
4876
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
3315
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
3
2215
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.