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")