Sviluppo una pagina Web in cui visualizzo una casella di riepilogo che viene recuperata da un database. Dinamicamente ho aggiunto alcuni elementi in esso. Si aggiunge alla fine della casella di riepilogo, quindi desidero ordinare l'elemento della casella di riepilogo dopo aver aggiunto gli elementi. Ho provato Arraylist
per l'ordinamento, ma non funziona.Ordina gli elementi della casella di riepilogo in C#
risposta
Intendi in modo dinamico che aggiungi elementi all'elenco tramite Javascript o dopo il postback di qualche tipo utilizzando i controlli ASP.NET?
Se si aggiunge dinamicamente tramite Javascript, la risposta sarà l'ordinamento con jQuery e se dopo il postback si utilizza ASP.NET, è necessario utilizzare l'oggetto Elenco ubicato in System.Collections.Generic.
Ciao eugeneK, Ha detto che ha usato l'Arrayylist per l'ordinamento ... Quindi presumo che stia facendo al server. Ma ora dubito, abbiamo arraylist in javascript o in JQuery? –
provare il seguente codice:
DataTable dt = new DataTable();
dt.Columns.Add("val", Type.GetType("System.Int32"));
DataRow dr;
for (int i = 1; i <= 31; i++)
{
dr = dt.NewRow();
dr[0] = i;
dt.Rows.Add(dr);
}
dt.AcceptChanges();
DataView dv = dt.DefaultView;
dv.Sort = "val desc";
ddlDay.DataTextField = "val";
ddlDay.DataValueField = "val";
ddlDay.DataSource = dv.ToTable();
ddlDay.DataBind();
Se ur vincolante casella di riepilogo impostando origine dati come DataTable popolato con i dati db poi quando si desidera aggiungere un nuovo elemento invece di aggiungere la voce di aggiungere il record alla datatable . Quindi creare un dataview per questo DataTable, ordinare i dati del dataview come di seguito:
DataView dv = dt.DefaultView;
dv.Sort = "val desc";
quindi impostare il DataSource del listbox come dv.ToTable()
Non riesco a capire cosa hai fatto qui – Sakthivel
Dovete ordinare DataTable prima di assegnare come origine dati alla casella di riepilogo .
DataTable.DefaultView.sort = "[Nome colonna]".
Come hai detto che stai usando il metodo Aggiungi per aggiungere ListItems in List, il metodo Add aggiunge sempre ListItems. È possibile aggiungere elementi all'indice desiderato utilizzando il metodo Insert con indice. List.Insert (ListItem, index)
Acclamazioni
Prova questo codice in caso di PreRender
vostra ListBox
.
System.Collections.SortedList sorted = new SortedList();
foreach (ListItem ll in ListBox1.Items)
{
sorted.Add(ll.Text, ll.Value);
}
ListBox1.Items.Clear();
foreach (String key in sorted.Keys)
{
ListBox1.Items.Add(new ListItem(key, sorted[key].ToString()));
}
Sei una leggenda! Mi sono fermato sprecando 4 ore in più del necessario! – Fandango68
Basta chiamare ArrayList.Sort. Esempio di codice nel link.
So che questa domanda è abbastanza vecchio, ma stavo guardando un modo di fare questo senza classi Comparer, ArrayLists ecc Quindi ho pensato di incollare il metodo che avevo usato per gli altri:
Si prega di notare che il mio metodo usa LINQ to Objects, quindi funzionerà solo nelle versioni più recenti del Framework.
// get a LINQ-enabled list of the list items
List<ListItem> list = new List<ListItem>(ListBoxToSort.Items.Cast<ListItem>());
// use LINQ to Objects to order the items as required
list = list.OrderBy(li => li.Text).ToList<ListItem>();
// remove the unordered items from the listbox, so we don't get duplicates
ListBoxToSort.Items.Clear();
// now add back our sorted items
ListBoxToSort.Items.AddRange(list.ToArray<ListItem>());
Come funzionerebbe in VB.NET? E il tuo codice non distrugge tutti i valori, come in questo esempio: http://www.devcurry.com/2009/07/sort-items-in-aspnet-dropdownlist-using.html Grazie! – Flo
No, nella prima riga, dove leggo gli oggetti ListItem, mantengo il riferimento a loro nella variabile "elenco". Quindi, quando l'elenco viene cancellato, questi stessi elementi vengono aggiunti di nuovo in seguito, solo in un ordine diverso. Il mio VB.NET è estremamente arrugginito, ma vedendo come sto usando la sintassi del metodo LINQ, penso che tu possa fare le stesse chiamate in un modo simile. Basta ricordare di includere (Importare) la libreria System.Linq. –
Inutile a partire da VS2010 in poi – Fandango68
Ecco il codice vb Private Sub sortList (ByVal lb come DropDownList) 'ottenere un elenco LINQ-enabled delle voci di elenco Dim lista come nuovo List (Of ListItem) (lb.Items.Cast (Of ListItem)()) 'usa LINQ su Oggetti per ordinare gli articoli come richiesto list = list.OrderBy (Function (li) li.Text) .ToList() ' rimuovi gli elementi non ordinati dalla lista, quindi non ottenere duplicati lb.Items.Clear() 'ora aggiungere i nostri articoli ordinati lb.Items.AddRange (list.ToArray()) End Sub
So che questo è molto simile alla risposta di The King, ma questo è il modo in cui ha funzionato per me.
System.Collections.SortedList sorted = new System.Collections.SortedList();
foreach (ListItem ll in ListInQuestion.Items)
{
sorted.Add(ll.Value, ll.Text);//yes, first value, then text
}
ListInQuestion.Items.Clear();
foreach (String key in sorted.Keys)
{
ListInQuestion.Items.Add(new ListItem(sorted[key].ToString(), key));// <-- look here!
}
Spero che funzioni per qualcun altro.
- 1. WPF - nascondere gli elementi della casella di riepilogo
- 2. C#: cambia colore negli elementi della casella di riepilogo
- 3. WPF C#: Riorganizza gli elementi nella casella di riepilogo tramite trascinamento della selezione
- 4. Sposta gli elementi selezionati da una casella di riepilogo a un'altra in C# winm
- 5. Passare attraverso una casella di riepilogo selezionata e controllare tutti gli elementi C#
- 6. Non mostrare elementi parziali in una casella di riepilogo WPF
- 7. voci della casella di riepilogo orientate orizzontali
- 8. datatemplate casella di riepilogo WPF
- 9. TinyMCE visualizza elementi casella di riepilogo come html
- 10. notifiche casella di riepilogo
- 11. Animazione di elementi rimossi nella casella di riepilogo
- 12. Incorporare un separatore nella casella di riepilogo
- 13. Ordina elementi ListBox utilizzando Javascript/Jquery
- 14. Spinner con gli elementi della casella di controllo, è possibile?
- 15. Winform - Come impedire la selezione delle voci della casella di riepilogo
- 16. La selezione di un elemento casella di testo in una casella di riepilogo non modifica l'elemento selezionato della casella di riepilogo
- 17. Come si ottiene la "chiave" dell'elemento della casella di riepilogo nell'app di winforms C#?
- 18. Come caricare gli elementi dell'elenco selezionati nella casella di riepilogo a selezione multipla nella vista di aggiornamento in yii?
- 19. Layout casella di riepilogo WPF: più colonne
- 20. Vai alla voce casella di riepilogo digitando primi caratteri
- 21. come si fa a specifiy quanti oggetti vengono mostrati (altezza) in una casella di riepilogo
- 22. Sostituire gli elementi multipli stringa in C#
- 23. Ottieni elementi dalla casella di riepilogo nel controller MVC ASP 4
- 24. Specificare DataContext tipo sulla casella di riepilogo ItemContainer in stile
- 25. Scorrimento automatico in una casella di riepilogo Silverlight
- 26. Impossibile eseguire il valore-chiave nella casella di riepilogo in C#
- 27. Associazione di chiave e valore di un dizionario in una casella di riepilogo con wpf
- 28. Come cercare tra tutti gli elementi di una casella combinata in C#?
- 29. Aggiungi un pulsante (o qualsiasi controllo in realtà) a una casella di riepilogo in C# WPF?
- 30. elementi Ordina lista in Elixir Lang
Sarebbe più efficiente ordinare l'elenco ** prima ** aggiungendo gli elementi alla casella di riepilogo. –
Ma quando aggiungo finalmente gli elementi che aggiunge. Ma ho bisogno di un posto appropriato. – Sakthivel
Perché non incolla il codice di esempio ... – RichardOD