Nello script seguente si può notare la potenza e la flessibilità dell'utilizzo dell'evento OnItemDataBound: associando a questo evento un metodo, esso viene richiamato per ogni item (riga di dettaglio) creato.
Lo script prevede l'estrazione dei dati da un database, richiamando la subroutine BindDataGrid() che associa i dati al DataGrid "Elenco".
Il DataGrid prevede anche la paginazione (non è il tema dell'esempio) ma la parte importante è contenuta nel metodo ItemDataBound(), che aggiunge degli attributi alle righe della tabella generata dal DataGrid.
Nel caso specifico servono a creare un effetto al passaggio del mouse sulle righe, ovvero viene modificato il colore di sfondo, in modo da selezionare la riga interessata. Una volta che il mouse si sposta il colore ritorna al valore precedente.
Un'altra cosa importante è la possibilità di intercettare i valori delle singole celle: nel caso specifico viene utilizzato un esempio molto banale ma sicuramente molto potente.
Viene modificato il valore della seconda colonna (il parametro è 1 perchè zero-based). Al contenuto della cella viene aggiunto staticamente un link. E' possibile fare lo stesso dinamicamente andando a pescare il dato in un database.
<SCRIPT RUNAT="SERVER" LANGUAGE="VB"> sub BindDataGrid() Dim objDS As New DataSet() dim conn as SQLconnection = new SQLconnection (stringa di connessione...) strSQL = "SELECT..." Dim objDataAdapter As New SQLDataAdapter(strSQL, conn) objDataAdapter.Fill(objDS, "contatti") Elenco.DataSource = objDS.Tables(0).DefaultView Elenco.DataBind() 'totale pagine lblPagine.InnerHTML = "numero dipagine: <b>" & Elenco.PageCount & "</b>" 'associato ad un tag DIV (runat=server) conn.close() end sub Sub ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) 'esegue solo per gli item If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then 'aggiunge per ogni riga gli attributi di tipo style e.Item.Attributes.Add("onmouseover", "this.style.backgroundColor='Silver'") 'esegue nel caso di item alternativo (righe dispari) if e.Item.ItemType = ListItemType.AlternatingItem e.Item.Attributes.Add("onmouseout", "this.style.backgroundColor='#DDD'") else e.Item.Attributes.Add("onmouseout", "this.style.backgroundColor='#EEè") end if 'modifica il contenuto di una cella di dettaglio creando un link e.Item.Cells(1).Text = "<a href='quello che vuoi' class='stilè title='quello che vuoi'>" + e.Item.Cells(1).Text + "</a>" end if End Sub Sub PageIndexChanged_onclick(objSender As Object, objArgs As DataGridPageChangedEventArgs) ' imposta il numero di pagina Elenco.CurrentPageIndex = objArgs.NewPageIndex 'Pagina di riferimento lblPagine.InnerHTML = "Pagina <b>" & objArgs.NewPageIndex+1 & "</b>" ' effettua di nuovo il binding dei dati BindDataGrid() End Sub </SCRIPT> <form runat="server"> <div id="lblPagine" class="stile" runat="server" /> <ASP:DataGrid id="Elenco" runat="server" OnItemDataBound="ItemDataBound" CellPadding="2" ShowHeader="true" BorderColor= "#000000" BackColor = "#EEEEEE" HeaderStyle-BackColor= "#777777" HeaderStyle-CssClass= "intestazione" ItemStyle-verticalalign="Top" ItemStyle-CssClass = "piccolo" AlternatingItemStyle-BackColor="#DDDDDD" Border="1" PagerStyle-Mode="NumericPages" PagerStyle-HorizontalAlign="Right" PagerStyle-position="TopAndBottom" PagerStyle-CssClass="paginazione" OnPageIndexChanged="PageIndexChanged_OnClick" width="100%" AutoGenerateColumns="true" > </ASP:DataGrid> </form>
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.