It is common practice among programmers to use
DataBinder.Eval
method in data binding controls. This should be acceptable for a small amount of data. But if the data become large, it is not an optimal method as it has the overhead of using reflection.
According to Microsoft:
"Because this method performs late-bound evaluation, using reflection at run time, it can cause performance to be noticeably slow."
Example:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="PersonId" DataSourceID="SqlDataSource1">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"Name") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"Age") %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Optimal alternative:
<asp:GridView ID="GridView2"
runat="server" AutoGenerateColumns="False"
DataKeyNames="PersonId" DataSourceID="SqlDataSource1">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<%# ((DataRowView)Container.DataItem)["Name"]%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<%# ((DataRowView)Container.DataItem)["Age"]%>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
If Data Reader is used to bind the control, then the optimal alternative is:
<asp:GridView ID="GridView3" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<%# ((DbDataRecord)Container.DataItem).GetString(0)%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<%# ((DbDataRecord)Container.DataItem).GetInt32(1)%>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
For using these castings, you need to import a few namespaces to the page such as:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.Common" %>
I am developer in .Net and GIS. albin_gis@yahoo.com