Il DataGrid supporta in maniera nativa dei meccanismi di ordinamento. Basta sfruttare l'oggetto DataGridSortCommandEventArgs, passatto dalla sub invocata in seguito al click del link contenuto nella tabella, per intercettare tramite la proprietà SortExpression il nome del campo stesso.
Nell'esempio si è scelto di utilizzare un sistema particolare, in grado di filtrare direttamente sulla query, evitando così di dover creare un DataView ed ordinare i dati su quest'ultimo. In questo modo le performance saranno migliori, demandando il lavoro al database.
Inoltre, utilizzando il ViewState come appoggio per i valori selezionati, il sistema permette di cambiare l'ordinamento semplicemente cliccando una seconda volta sulla stessa colonna.
Ecco il codice, da personalizzare solo in stringa di connessione ed ovviamente tabella del database:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<form runat="server">
<asp:DataGrid id="MyDataGrid" runat="server" AutoGenerateColumns="False" AllowSorting="True" OnSortCommand="SortRows">
<Columns>
<asp:BoundColumn DataField="lastname" SortExpression="lastname" HeaderText="Last Name" />
<asp:BoundColumn DataField="firstname" SortExpression="firstname" HeaderText="First Name" />
</Columns>
</asp:DataGrid>
</form>
<SCRIPT RUNAT="SERVER">
Sub SortRows (sender As Object, e As DataGridSortCommandEventArgs)
' su quale campo effettuare l'ordinamento?
ViewState("campo") = e.SortExpression
If ViewState("direzione") Is Nothing OrElse ViewState("direzione") = "DESC" Then
ViewState.Add("direzione", "ASC")
Else
ViewState("direzione") = "DESC"
End If
' carico dati con la nuova query
BindData()
End Sub
Sub BindData()
' stringa di connessione
Dim strConnect As String = "Server=(local);Trusted_Connection=True;Database=Master;"
' query SQL
Dim strSQL As String
strSQL = "SELECT * FROM miatabella"
If ViewState("direzione") Is Nothing Then
strSQL += " ORDER BY " & ViewState("campo") & " " & ViewState("direzione")
end if
' oggetto Connessione
Dim objConnect As New SQLConnection(strConnect)
' DataAdapter
Dim objDataAdapter As New SQLDataAdapter(strSQL, objConnect)
' DataSet
Dim objDataSet As New DataSet()
' riempie il dataset con i dati del dataadpter
objDataAdapter.Fill(objDataSet, "risultati")
' imposto la sorgente
MyDataGrid.DataSource = objDataSet.Tables(0).DefaultView
' bind dei dati
MyDataGrid.DataBind()
End Sub
Sub Page_Load()
' effettua il binding
if Not Page.IsPostBack then BindData()
End Sub
</SCRIPT>
- Il nostro nuovo imminente libro in prenotazione: ASP.NET 3.5 per tutti
- #950 - Il supporto al pulsante back del browser con ASP.NET AJAX 3.5 SP 1
- Galleria fotografica dinamica con ASP.NET AJAX
- Speciale per il lancio di Visual Studio 2008, SQL Server 2008 e Windows Server 2008 dal 25/02 al 07/03
- ASPItalia.com Future Web Conference: 15 gennaio 2008, L'Aquila
- I bug di ASP.NET AJAX 1.0 risolti con ASP.NET AJAX 3.5
- Extension Method per semplificare la Reflection
- Nuovi corsi su ASP.NET 3.5 e LINQ a catalogo
- #926 - Autenticazione con Membership API e selezione del dominio per Active Directory
- Realizzare applicazioni ASP.NET sicure - Seconda parte
- uno snippet per inserire riga di commento
- #951 - Accedere ai dati con i Dynamic Data Controls di ASP.NET 3.5 SP 1
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
L'articolo mi è stato molto utile per quanto riguarda l'ordinamento di dati proveniente da tabelle sql.Il problema sorge quando però voglio ...
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.








Stampa
Snippet
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
Credo manchi un NOTIf ViewState("direzione") Is Nothing Then >>> If Not ViewState("direzione") Is Nothing Thenalmeno a me se non modificavo ...
Continua »»» | Rispondi »»»