2016-04-22 9 views
-1

Ich habe eine Listview, die Daten vom TypSortieren von Listview IP

class InfoItem { public string IP { get; set; } public string MAC { get; set; } public string HOST { get; set; } }

Eventhandler PingCompletedCallback bekommt IPs in zufälliger Art und Weise enthält, so können wir `t Auftrag von Ips vorhersagen. Wir müssen sie sortieren. Im mit diesen

if (!Dispatcher.CheckAccess()) 
      { 

       Dispatcher.Invoke(new Action(() => 
       { 
        lstNetworks.Items.Add(new InfoItem() { IP = e.Reply.Address.ToString(), MAC = macAdress, HOST = hostName }); 
        lstNetworks.Items.SortDescriptions.Add(new SortDescription("IP", ListSortDirection.Ascending)); 
       })); 
      } 

und es ist teilweise funktioniert, aber das Ergebnis sieht wie folgt aus

192.168.1.1 192.168.1.10 192.168.1.2 192.168.1.254 192.168.1.3 und so weiter. ..

Wie können wir das Listview-Elemente in der richtigen Art und Weise

192.168.1.1 192.168.1.2sortieren192.168.1.3 192.168.1.10 192.168.1.254

UPDATE. Ich habe versucht, wie in dieser Frage zu tun:

List<InfoItem> list = new List<InfoItem>(); 
foreach (var item in lstNetworks.Items) { 
list.Add(item as InfoItem); 
} 
List<InfoItem> list2 = new List<InfoItem>(); 
list2 = list.Select(Version.Parse).OrderBy(arg => arg).Select(arg => arg.ToString()).ToList(); 

aber es gibt mir und Ausnahme die Art Argument für die Methode auswählen kann nicht aus der Nutzung zu entnehmen.

+0

Sie müssen erstellen Sie eine benutzerdefinierte Sortierung für die IP-Adresse verwenden könnte . – rbm

+0

Mögliches Duplikat von [So sortieren Sie die Liste der IP-Adressen mit C#] (http://stackoverflow.com/questions/6248039/how-to-sort-list-of-ip-addresses-using-c-sharp) –

+0

@ Evan Trimboli Sortiert Array von ips ist kein Problem, ich muss es sortieren und nicht die Abhängigkeit zwischen IP-MAC und HOSTname zu verlieren. Also muss ich alle Liste sortieren –

Antwort

0

Wie in der anderen Antwort erwähnt, können Sie Version.Parse es zu tun verwenden:

public class Thing { 
    public string ip; 
} 

var list = new List<Thing>() { 
    new Thing() { ip = "192.168.1.1" }, 
    new Thing() { ip = "192.168.1.10" }, 
    new Thing() { ip = "192.168.1.2" }, 
    new Thing() { ip = "192.168.1.254" }, 
    new Thing() { ip = "192.168.1.3" } 
}; 
var sorted = list.OrderBy(item => Version.Parse(item.ip)); 
foreach (var item in sorted) { 
    Console.WriteLine(item.ip); 
} 
+0

Danke! Es funktioniert perfekt !! –

0

Sie Kunde IComparable Klasse

public class MyIP : IComparable<MyIP> 
{ 
    List<int>subAddress = null; 
    public MyIP(string IPstr) 
    { 
     subAddress = IPstr.Split(new char[] {'.'}).Select(x => int.Parse(x)).ToList(); 
    } 
    public int CompareTo(MyIP other) 
    { 
     int results = 0 
     if(this.subAddress[0] != other.subAddress[0]) 
     { 
      results = this.subAddress[0].CompareTo(other.subAddress[0]); 
     } 
     else 
     { 
      if(this.subAddress[1] != other.subAddress[1]) 
      { 
      results = this.subAddress[1].CompareTo(other.subAddress[1]); 
      } 
      else 
      { 
      if(this.subAddress[2] != other.subAddress[2]) 
      { 
       results = this.subAddress[2].CompareTo(other.subAddress[2]); 
      } 
      else 
      { 
       results = this.subAddress[3].CompareTo(other.subAddress[3]); 
      } 
      } 
     } 
     return results; 
    } 

}​ 
Verwandte Themen