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