Torna al Thread

'CLASSE ICOMPARER PERSONALIZZATA CHE ORDINA IN STILE WINDOWS EXPLORER Public Class CustomComparer Implements IComparer Private Position As Integer Private Order As Integer = 1 Private NomeColonna As String = "" Public Sub New(_NomeColonna As String, Optional ByVal Ascending As Boolean = True) NomeColonna = _NomeColonna If Not Ascending Then Order = -1 End If End Sub Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare Dim ValoreX As String = CType(x, DatiItemLView_Dati).NomeFile Dim ValoreY As String = CType(y, DatiItemLView_Dati).NomeFile Dim res1() As String = System.Text.RegularExpressions.Regex.Split(ValoreX.ToString, "(\d+)", System.Text.RegularExpressions.RegexOptions.IgnoreCase) Dim reswithempty() As String = System.Text.RegularExpressions.Regex.Split(ValoreY.ToString, "(\d+)", System.Text.RegularExpressions.RegexOptions.IgnoreCase) Dim res2(0) As String Dim c As Integer = 0 For Each item In reswithempty ' I dont like this If item <> String.Empty Then ReDim Preserve res2(c) res2(c) = item c += 1 End If Next Position = 0 For Each xstr In res1 If res2.Length > Position Then If xstr <> String.Empty Then If Not IsNumeric(xstr) AndAlso Not IsNumeric(res2(Position)) Then Dim intresult As Integer = String.Compare(xstr, res2(Position), True) If intresult <> 0 Then Return intresult * Order Else Position += 1 End If ElseIf IsNumeric(xstr) And Not IsNumeric(res2(Position)) Then Return -1 * Order ElseIf Not IsNumeric(xstr) And IsNumeric(res2(Position)) Then Return 1 * Order ElseIf IsNumeric(xstr) And IsNumeric(res2(Position)) Then Dim res As Integer = Decimal.Compare(Decimal.Parse(xstr), Decimal.Parse(res2(Position))) If res = 0 Then Position += 1 Else Return res * Order End If End If End If Else Return -1 * Order End If Next Return 1 * Order End Function End Class 'HANDLE SULL'EVENTO SORTING PER ESEGUIRE IL SORTING PERSONALIZZATO Private Sub DataGrid1_Sorting(sender As Object, e As Microsoft.Windows.Controls.DataGridSortingEventArgs) Handles DataGrid1.Sorting Dim column As Microsoft.Windows.Controls.DataGridColumn = e.Column Dim comparer As IComparer = Nothing e.Handled = True Dim direction As ListSortDirection = If((column.SortDirection <> ListSortDirection.Ascending), ListSortDirection.Ascending, ListSortDirection.Descending) column.SortDirection = direction Dim lcv As ListCollectionView = DirectCast(CollectionViewSource.GetDefaultView(DataGrid1.ItemsSource), ListCollectionView) comparer = New CustomComparer(column.SortMemberPath, IIf(direction = ListSortDirection.Ascending, True, False)) lcv.CustomSort = comparer End Sub
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5