Il blog di Giuseppe Marchi - SharePoint MVP
NAVIGATION - SEARCH

Differenze tra i metodi Eval e Bind

La sintassi per effettuare il databinding su controlli che utilizzano l'approccio a template è stata modificata dalla versione 1.x alla 2.0 di ASP.NET, in quanto il metodo DataBinder.Eval(Container.DataItem "Campo"), che continua comunque a funzionare, è stato sorpassato dall'arrivo dei metodi Eval() e Bind().

Il metodo Eval, è quello che rispecchia in tutto il vecchio DataBinder.Eval, in quanto può accettare o un parametro singolo (il nome del campo su cui fare databinding) oppure può aggiungere anche la stringa di formattazione di tale dato.

Il metodo Bind, invece, è stato creato appositamente per quei controlli che supportano anche l'update o l'insert di dati, in quanto permette di effettuare quello che è stato chiamato il "two way databinding", la tecnica cioè di fare da ponte tra la presentazione del dato e la sua scrittura nella fonte di dati. Il metodo va utilizzato infatti, all'interno di template come EditItemTemplate o InsertItemTemplate, propri dei controlli quali la GridView, la FormView o la DetailsView.

<asp:GridView ID="grid" runat="server" DataSourceID="ObjectDataSource1" AutoGenerateColumns="False">

<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Image ID="img" ImageUrl='<%# Eval("Img", "images/{0}") %>' runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txt" Text='<%# Bind("Img") %>' runat="server" />
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

Inoltre, esistono sono casi in cui, il metodo Bind dev'essere utilizzato anche all'interno del template ItemTemplate, in quanto può dover fornire il dato di una tale colonna all'operazione che viene effettuata lato server, anche se la specifica colonna non viene effettivamente modificata, in quanto, magari, è stato segnata come ReadOnly. E' il caso questo di colonne contenenti identificatori e chiavi univoche.

N.b.: Se decidete di utilizzare il metodo Bind, per effettuare il databinding dei dati, il controllo che viene "bindato" deve avere settata la proprietà ID.
blog comments powered by Disqus