Ordinare un DataTable ADO.NET

Niente di più facile: si entra in un bar un po’ “in” e si chiede al barista: “Un DataTable, senza ghiacco!”; secondo me, si corre anche il rischio di vedere arrivare qualcosa, probabilmente molto alcolico.

Scherzi a parte, qui si tratta di ordinare secondo un criterio a nostro piacimento, un DataTable: ovviamente se questo deriva direttamente da un database, conviene farci restituire il DataTable già ordinato.

Tuttavia vi sono circostanze in cui il DataTable viene creato dinamicamente in memoria, disconnesso da qualsiasi database; questo viene poi popolato ed infine deve essere ordinato: come fare?

Una prima soluzione è quella di ordinare manualmente le righe in un nuovo DataTable:

Public Function Order(source As DataTable, criteria as String) As DataTable

  Dim result As New DataTable
   Dim rows() As DataRow

  rows = source.Select("", criteria)

  For Each row As DataRow In rows
     result.ImportRow(row)

  Next

  Return result

End Function

Esiste però anche un altro metodo, che ha il pregio di non creare un DataTable temporaneo e quindi dovrebbe essere più veloce: passare dal DataView del DataTable stesso delegandogli l’ordinamento.

Public Sub Order(source As DataTable, criteria as String)
  source.DefaultView.Sort = criteria

End Sub

La routine è talmente semplice che non vale neanche la pena di scriverla, ma usare direttamente la proprietà Sort della DefaultView del DataTable.

Un’ultima cosa: in entrambi i casi il parametro criterio deve essere valorizzato come se fosse parte della clausola ORDER BY di Sql Server: perciò, ad esempio:

Order(sourceDataTable, "IdCliente ASC")

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

*