Originariamente inviato da AndreaZani
Perché, dato un array, non ti crei un algoritmo di orginamento? Prestazionalmente in asp.net non dà problemi. Prova a leggere questo
tutorial. Sono presenti gli algoritmi scritti in vb per il classic ASP, ma una conversione in asp.net è banale.
Ciao
In effetti mi sono messo in libreria il vecchio QuickSort già dai tempi di Asp, e l'ho pure messo in una libreria javascript. Poi ho scoperto che un vettore javascript si può ordinare in maniera nativa con un meccanismo molto semplice e potente.
Poi è arrivato Asp.Net, che tra le migliaia di classi ha pure il metodo Sort che funziona benissimo ed è anche molto potente. In pratica, dato un vettore, lo ordino, nel mo particolare caso, così:
codice:
Dim a$() = {"'Z", "AA", "b", "a", "SANTA GIUSTA", "SANTA MARIA COGHINAS", "SANTA TERESA GALLURA", "SANTADI", "SANT'ANDREA FRIUS", "SANT'ANNA ARRESI", "SANT'ANTIOCO", "SANT'ANTONIO DI GALLURA", "SANTU LUSSURGIU"}
Array.Sort(a, New asciiOrderClass)
For Each el As String In a
PrintLn(el)
Next
dove l'oggetto asciiOrderClass è una istanza della classe:
codice:
Public Class asciiOrderClass
Implements IComparer
Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
Implements IComparer.Compare
'due oggetti null sono uguali
If (x Is Nothing) And (y Is Nothing) Then Return 0
'ogni oggetto non null è maggiore di un oggetto null
If x Is Nothing Then Return 1
If y Is Nothing Then Return -1
Dim p1$ = DirectCast(x, String).ToUpper
Dim p2$ = DirectCast(y, String).ToUpper
Return String.CompareOrdinal(p1, p2)
End Function
End Class
Se prendo i dati da una tabella, non ho trovato di meglio che fare così:
codice:
Dim sql$ = "SELECT ID, NOME_COMUNE FROM COMUNI WHERE NOME_COMUNE LIKE 'SANT%' AND CODICE_ISTAT_REGIONE = '20' "
Dim dt As DataTable = Libreria.GetDataTable(StringaConnessione, sql)
dt.Columns.Add("nomeESADECIMALE", GetType(String))
For Each dr As DataRow In dt.Rows
dr("nomeESADECIMALE") = Libreria.StringaToEsadecimale(Libreria.NullToString(dr("nome_comune")).ToUpper)
Next
Dim dv As New DataView(dt)
dv.Sort = "nomeESADECIMALE"
Me.DataGrid1.DataSource = dv
Me.DataGrid1.DataKeyField = "id"
Me.DataGrid1.DataBind()
Ciao