Optimal Alternative To DataBinder.Eval





5.00/5 (1 vote)
It is not a trick, but a tip/ call for consider to use alternative to Databinder.Eval method with larger data sets
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" %>