Ordinamento del DataGrid di ASP.NET

di Daniele Bochicchio, in ASP.NET, Datagrid, Databind,

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

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.

Approfondimenti

I più letti di oggi