J'ai un DataGridView avec une colonne de chaîne d'adresses IP de périphériques trouvés dynamiquement.VB.net: comparaison des adresses IP Chaînes à trier dans datagridview?
Problème: Je souhaite comparer cette chaîne d'adresses IP pour pouvoir les trier en tant qu'adresse IP et non en tant que chaîne. J'ai pris quelques conseils à partir des questions C#: Custom sort of DataGridView de stackflow et je vois que vous devez essentiellement trier la source de données d'origine, puis l'afficher dans la vue datagridview.
Ce que j'ai essayé:
J'ai essayé de créer une classe IComparer, mais je suis arrivé une exception InvalidOperation que ladite création d'un nouveau comparateur n'est pas bon car il est un objet lié aux données. Donc, c'est hors de question. Ce que je veux savoir, c'est un bon algorithme de chaîne pour refaire cela de manière à ce que 10.10.1.190 soit avant le 10.10.1.199. Mon premier réflexe était de supprimer le ".", De le multiplier et de faire un comparateur, mais cela ne fonctionne pas avec un grand nombre moyen (c'est-à-dire 10.10.0.197 contre 10.10.1.2).
J'ai également essayé de créer une liste d'Ipaddresses (analyse directe à partir des cellules de datagridview) mais la fonction list.sort() commet également une erreur.
Voici le code que j'ai l'intérieur de l'événement click d'en-tête (quand je le veux trier):
If selectedColumn.Name = "IP Address" Then
'gives error, invalidOperation
'cameraTable is the datagridview name
' cameraTable.Sort(New CellComparer(SortOrder.Ascending))
For i As Integer = 0 To cameraTable.Rows.Count - 1
unsortedCopy.Add(Net.IPAddress.Parse(cameraTable("IP Address", i).Value.ToString))
Next
'gives error
unsortedCopy.Sort()
'make new datatable with sorting matching array
'make it datasource
'refresh GUI
End If
Qu'est-ce qu'un bon moyen de comparer les adresses IP? Ou peut-être faire le tri personnalisé d'une manière plus élégante?
Cela peut être utile http://stackoverflow.com/questions/6248039/how-to-sort-list-of-ip-addresses-using-c-sharp – Steve
Vous devrez peut-être utiliser un DataTable comme source pour votre DataGridView. De cette façon, vous pouvez utiliser la suggestion de Steve pour convertir la notation en pointillés IPv4 en UInt32 et trier dessus. Vous n'avez pas besoin d'afficher réellement la colonne avec la valeur UInt32. –
Utiliser la vue de données. .. – Codexer