Ordinare un DataTable

pubblicato il 21/05/2008

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?

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 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 prorietà 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: perciò, ad esempio:

Order(sourceDataTable, "IdCliente ASC")