Ich entwickle eine Webseite, indem ich ein Listenfeld zeige, das aus einer Datenbank geholt wird. Dynamisch habe ich einige Elemente hinzugefügt. Es wird am Ende des Listenfelds hinzugefügt, sodass ich das Listenfeldelement nach dem Hinzufügen von Elementen sortieren möchte. Ich habe Arraylist
zum Sortieren ausprobiert, aber es funktioniert nicht.
Ich weiß, dass diese Frage ziemlich alt ist, aber ich habe mir einen Weg gesucht, dies ohne Vergleichsklassen, ArrayLists usw. zu machen. Also dachte ich, ich würde die Methode einfügen, die ich für andere verwendet habe:
Bitte beachten Sie, dass meine Methode LINQ to Objects verwendet, so dass es nur in neueren Versionen des Frameworks funktioniert.
%Vor%Probieren Sie den folgenden Code:
%Vor%Wenn Sie das Listenfeld binden, indem Sie die Datenquelle als DataTable festlegen und mit db-Daten füllen, fügen Sie den Datensatz der Datentabelle hinzu, wenn Sie ein neues Element hinzufügen möchten, anstatt das Element hinzuzufügen. Erstellen Sie anschließend eine Datenansicht für diese Datentabelle, und sortieren Sie die Daten in der Datenansicht wie folgt:
%Vor% dann legen Sie die Datenquelle der Listbox als dv.ToTable()
Sie müssen die Datentabelle sortieren, bevor Sie sie dem Listenfeld als Datenquelle zuweisen.
DataTable.DefaultView.sort="[Spaltenname]".
Da Sie erwähnt haben, dass Sie die Add-Methode verwenden, um ListItems in List hinzuzufügen, hängt die Add-Methode immer die ListItems an. Sie können Elemente im gewünschten Index hinzufügen, indem Sie die Insert-Methode mit Index verwenden. List.Insert (ListItem, Index)
Prost
Meinst du damit dynamisch, dass du Elemente hinzufügst, die über Javascript oder nach der Rückübertragung von irgendwas mit ASP.NET-Steuerelementen aufgelistet werden?
Wenn Sie dynamisch mit Javascript hinzufügen, würde Ihre Antwort mit jQuery sortieren, und wenn Sie nach dem Postback mit ASP.NET arbeiten, sollten Sie das Listenobjekt unter System.Collections.Generic verwenden.
Hier ist der VB-Code Private Sub-Sortierliste (ByVal Ib als DropDownList) 'eine LINQ-fähige Liste der Listenelemente abrufen Dim-Liste als neue Liste (von ListItem) (lb.Items.Cast (Of ListItem) ()) Verwenden Sie LINQ to Objects, um die Elemente nach Bedarf zu sortieren list = list.OrderBy (Funktion (li) li.Text) .ToList () 'Entfernen Sie die ungeordneten Elemente aus der Listbox, so dass wir keine Duplikate erhalten lb.Items.Clear () 'Jetzt fügen Sie unsere sortierten Artikel zurück lb.Items.AddRange (list.ToArray ()) End Sub
Ich weiß, dass dies der Antwort von The King sehr ähnlich ist, aber so hat es bei mir funktioniert.
%Vor%Ich hoffe, das funktioniert für jemand anderen.