Home > ASP.NET > Asp.net datagrid sostituire le chiamate al metodo con l’uso di variabili static

Asp.net datagrid sostituire le chiamate al metodo con l’uso di variabili static

In Asp.net per modificare i dati presentati in un datagrid è pratica consolidata richiamare un metodo per rielaborare i dati , ottenuti in genere da un database,  con codice del segeunte tipo :

<a href='<%# _MyHttpUrl("/Library/" + DataBinder.Eval(Container.DataItem,"doctype").ToString()+"/" , DataBinder.Eval(Container.DataItem,"fileurl").ToString() ) %>' target="_blank">
<img class="noborder" src='<%# _MyIco( "/Library/" + DataBinder.Eval(Container.DataItem,"doctype").ToString()+"/", ( DataBinder.Eval(Container.DataItem,"fileurl").ToString() ) ) %>' width="<%# _MyIcoW %>" alt="icon" />
</a>
<br />
<%# _FileSize("/Library/" + DataBinder.Eval(Container.DataItem, "doctype").ToString() + "/" , DataBinder.Eval(Container.DataItem, "fileurl").ToString(), false)%>

.

In questo caso si utilizzano i tag html per linkare un documento ad un’ immagine  e per riportare le dimensioni del documento stesso.

Come si può notare più volte viene passato lo stesso dataitem. Ad esempio il  dataitem “doctype” viene passato 3 volte a 3 distinti metodi (funzioni)  _MyHttpUrl,  _MyIco, _FileSize

DataBinder.Eval(Container.DataItem, "doctype").ToString()

Forse è il caso, in queste situazioni, di valutare l’utilizzo di varibili static da modificare all’interno di un numero limitato di metodi e da inserire negli attributi dei tag html.  L’approccio dal punto di vista della programmazione ad oggetti non è il massimo. Però il codice è più leggibile, conciso e c’è meno carico in termini di elaborazione.  Ovviamente l’ordine diventa molto importante ad esempio  se la variabile static  _MyIcoW in

<img src='<%# _MyIco( "/Library/" + DataBinder.Eval(Container.DataItem,"doctype").ToString()+"/", ( DataBinder.Eval(Container.DataItem,"fileurl").ToString() ) ) %>' width="<%# _MyIcoW %>" alt="icon" />

viene ricalcolata  nel metodo _MyIco deve essere posta dopo la chiamata allo  metodo stesso. Diversamente essa avrà il valore determinato nell’elaborazione del precedente elemento del datagrid.

Sequendo questa logica il blocco riportato inzialmente diventa decisamente più conciso e leggero. La  maggior parte delle elaborazioni vengono effettuate nella chiamata al primo metodo.  Per ogni nuova row del datagrid, la chiamata al metodo _MyHttpUrl determina il ricalcolo delle variabili static  _MyIco,   MyIcoW,  _MyIcoA,  _RPath, _Url

<a href='<%# _MyHttpUrl("/Library/" + DataBinder.Eval(Container.DataItem,"doctype").ToString()+"/", DataBinder.Eval(Container.DataItem,"fileurl").ToString() ) %>' target="_blank">
<img class="noborder" src='<%# _MyIco %>' width="<%# _MyIcoW %>" alt="<%# _MyIcoA %> image" />
</a>
<br /><small>
<%# _FileSize( _RPath, _Url, false)%>

Importante è necessario usare <%# e non <%=
Se nel caso specifico si utilizzasse <%= il valore ritornato  sarebbe l‘ultimo valore elaborato  (vlaore del render time) utilizzando <%# essendo una direttiva databinding  viene ritornato il valore elaborato nelle varie fasi del databiding è quindi il valore ritornato cambia.

  • <%=   fa si che le espressioni siano valutate al monento de render  ( render time )
  • <%#  fa si che le espressioni siano valutate al momento del  DataBind()  e se non c’è DataBind non c’è valutazione dell’espressioni
Annunci
  1. Non c'è ancora nessun commento.
  1. No trackbacks yet.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: