Ottimizzare il DataGrid

di Cristian Civera, in .NET,

Il DataGrid è un gran bel controllo. Purtroppo però con il ViewState abilitato, una ventina di righe e qualche colonna, i dati inviati al client possono diventare molti e pesanti. Questo avviene perché il controllo memorizza la collezione delle colonne, gli stili e ogni singolo controllo del dg: TableRow, TableCell, ecc.

Siamo perciò costretti a disattivare il ViewState per il controllo ma così facendo rinunciamo alla paginazione o alle funzionalità di editing dei dati.

Nel caso in cui però ad ogni postback dobbiamo rifare il DataBind del dg (probabilmente perché è l'unico controllo nella pagina che lo scatena) possiamo tenere abilitato il ViewState ma intervenire su quali parti salvare. Il dg memorizza tutto proprio per permettersi in caso di postback di ricrearsi senza ricaricare i dati.

Intercettando l'evento ItemCreated indicheremo quali righe o celle salvare:

void datagrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
switch (e.Item.ItemType) {
case ListItemType.Item:
case ListItemType.AlternatingItem:
e.Item.EnableViewState = false;
break;
}

Il DataGridItem deriva da TableRow, quindi è un controllo che ha la proprietà EnableViewState. Impostandolo a livello di riga anche le celle o controlli figli non memorizzerano il ViewState. Se però una delle colonne contiene Button con CommandName che fanno scatenare eventi del DataGrid, sarà necessario limitarsi a disattivare il ViewState solo per le altre celle scorrendo la collezione Cells.

Il risultato è sicuramente apprezzabile guardando il ViewState restituito al client che diminuirà drasticamente.

Spero possa esservi utile ;-)

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese