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>
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.