#469 - Ordinamento del DataGrid di ASP.NET

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>


Approfondimenti
Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

M@nu scrive:
#469 - Ordinamento del DataGrid di ASP.NET

Credo manchi un NOTIf ViewState("direzione") Is Nothing Then >>> If Not ViewState("direzione") Is Nothing Thenalmeno a me se non modificavo ...
martedì 24 febbraio 2004 | 1 risposta
afabri scrive:
#469 - Ordinamento del DataGrid di ASP.NET

L'articolo mi è stato molto utile per quanto riguarda l'ordinamento di dati proveniente da tabelle sql.Il problema sorge quando però voglio ...
martedì 8 aprile 2003 | 1 risposta

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.