buon giorno a tutti..

ho un problema di ordinamento con una particolare condizione di colonna in datagridview..
la griglia è così composta da 4 colonne:
codice:
1: DataGridViewTextBoxColumn, nome : "ID"   <-- colonna nascosta contiene l'indentificativo della manutenzione ( numero crescente in ordite creazione temporale dell'istanza)
2: DataGridViewImageBoxColumn, nome: "Immagine" <-- contiene l'icona/foto della manutenzione
3: DataGridViewTextBoxColumn, nome: "Elenco_Man" <-- Contiente tutte le manutenzioni (testo formattato)
4: DataGridViewTextBoxColumn, nome: "Prossima_Man" <-- contiente la prossima prevista manutenzione in (testo formattato)
praticamente quando l'utente clicca sulla cella d'intestazione colonna, l' ordinamento varia asseconda della colonna relativa, ed eseguo questo tramite un select case nel codice di sortcompare. In particolare la colonna 2 (Immagine) deve ordinare secondo i valori contenuti nella colonna nascosta "ID".. è qui nasce il mio problema perchè non ordina nulla...

questo è il codice nell'evento SortCompare :
per ora tralascio il caso delle ultime due colonne (testo piccolo) ed evidenziato il codice per le prime 3 colonne di cui in rosso quella incriminata:
codice:
    Private Sub Grid_SortCompare(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewSortCompareEventArgs) Handles GridData.SortCompare
        With GridData
            Select Case e.Column.Name

                Case "ID"  ' l'ho inserito per fare una prova rendendo visibile la colonna
                    e.SortResult = String.Compare(e.CellValue1, e.CellValue2)

                Case "Immagine"
                    e.SortResult = String.Compare(.Rows(e.RowIndex1).Cells("ID").Value, .Rows(e.RowIndex2).Cells("ID").Value)

                Case "Voce"
                    e.SortResult = String.Compare(e.CellValue1, e.CellValue2)

               Case "Lista_Man"
                    Dim KM As New List(Of Long), D As New List(Of Object)

                    For Each n As Byte In {1, 2}
                        Dim i As Byte = 0, V() As String = Split(Microsoft.VisualBasic.Switch(n = 1, LCase(e.CellValue1), n = 2, LCase(e.CellValue2)), "(")
                        Dim _KM As Long = 0, _D As Object = ""
                        If InStr(V(i), "il") > 0 Then
                            _D = Trim(Strings.Right(V(i), Len(V(i)) - (InStr(V(i), "il") + 2)))
                            i += 1
                        End If
                        If Not IsDate(_D) Then _D = DateTime.FromOADate(0) Else _D = CDate(_D)

                        If InStr(V(i), "km") > 0 Then _KM = GetKM(V(i))

                        KM.Add(_KM) : D.Add(_D)
                    Next n

                    e.SortResult = KM(0) - KM(1)

                Case "Prossima_Man"
                    Dim V1() As String = Split(e.CellValue1, vbCrLf)
                    Dim V2() As String = Split(e.CellValue2, vbCrLf)

                    Dim KM1 As Integer = 0, KM2 As Integer = 0

                    For Each El1 As String In V1
                        If El1.Contains("km") Then KM1 = GetKM(El1) : Exit For
                    Next : If KM1 <= 0 Then KM1 = 999999
                    For Each El2 As String In V2
                        If El2.Contains("km") Then KM2 = GetKM(El2.Replace("a: ", "")) : Exit For
                    Next : If KM2 <= 0 Then KM2 = 999999

                    e.SortResult = KM1 - KM2

            End Select
        End With
    End Sub
il caso di "Immagine" tiene conto dei valori della colonna "ID" ma non ordina nulla..ho controllato tramite debug è i valori che vengono comparati sono giusti ed addirittura e.SortResult assume la giusta comparazione ...com'è possibile che non va? eppure non è la prima volta che faccio una cosa del genere anche più complesse di questa..??
ho fatto una marea di altre prove, alla fine ho scoperto che il problema si presenta proprio quando nel codice di comparazione utilizzo variabili diverse da e.CellValue1 e e.CellValue2... praticamente il codice viene eseguito correttamente (testimonia il debug) ma alla fine è l'ordirnamento lo fa sempre e comunque come se tenesse conto della comparazione dei valori di e.CellValue1 e e.CellValue2 (cioè come se il codice in sortcompare non venisse eseguito)... non è stranissima questa cosa??

bhu .. da manicomio

per cortesia se qualcuno sa risolvere questo problema, prego e ringrazio da subito!

GRAZIE