Je veux obtenir un tas d’éléments d’une liste, les append à un tableau, le sortinger, puis le replacer dans une liste différente. Voici ce que je suis venu avec:
ArrayList q = new ArrayList(); foreach (object o in listBox4.Items) q.Add(o); q.Sort(); listBox5.Items.Add(q.ToSsortingng());
Mais ça ne marche pas. Des idées?
ArrayList q = new ArrayList(); foreach (object o in listBox4.Items) q.Add(o); } q.Sort(); listBox5.Items.Clear(); foreach(object o in q){ listBox5.Items.Add(o); }
Vous pouvez simplement utiliser la fonctionnalité intégrée ListBox.Sorted
foreach (object o in listBox4.Items) { listBox5.Items.Add(o); } listBox5.Sorted = true;
Le paramétrage de ListBox5.Sorted = true garantira que les éléments de la zone de liste sont sortingés et que les éléments suivants ajoutés à la zone de liste seront ajoutés dans le bon ordre.
Bien entendu, cela suppose que vous ayez des critères de sorting simples, comme le suggère votre exemple.
Essaye ça:
var list = lstBox.Items.Cast().OrderBy(item => item.Text).ToList(); lstBox.Items.Clear(); foreach (ListItem listItem in list) { lstBox.Items.Add(listItem); }
Si vous en avez besoin pour sortinger les valeurs, il suffit de désactiver item.Text avec item.Value.
Prendre plaisir!
Ajoutez les éléments au tableau et fermez la boucle. Ensuite, sortinger les valeurs du tableau et le lier à la liste
Essayez AddRange
ArrayList q = new ArrayList(); foreach (object o in listBox4.Items) q.Add(o); q.Sort(); listBox5.Items.AddRange(q.ToArray());
Si vous utilisez .Net3.5, utilisez linq pour terminer cette tâche. Voici une liste de conversion et de sorting
var list = ListBox1.Items.Cast().Select(item => item.Value).ToList(); list.Sort(); ListBox2.DataSource =list; ListBox2.DataBind();
private void SortListBox(ListBox listBox) { SortedList list = new SortedList(); foreach (ListItem i in listBox.Items) { list.Add(i.Text, i.Value); } listBox.Items.Clear(); foreach(KeyValuePair i in list){ listBox.Items.Add(new ListItem(i.Key, i.Value)); } }
aussi vous pouvez utiliser des “méthodes d’extension” que j’ai écrites:
public static class ExtensionMethods { public static void Sort(this ListControl lb, bool desc = false) { var list = lb.Items.Cast().ToArray(); list = desc ? list.OrderByDescending(x => x.Text).ToArray() : list.OrderBy(x => x.Text).ToArray(); lb.Items.Clear(); lb.Items.AddRange(list); } public static void SortByValue(this ListControl lb, bool desc = false) { var list = lb.Items.Cast ().ToArray(); list = desc ? list.OrderByDescending(x => x.Value).ToArray() : list.OrderBy(x => x.Value).ToArray(); lb.Items.Clear(); lb.Items.AddRange(list); } public static void SortByText(this ListControl lb, bool desc = false) { lb.Sort(desc); } public static void SortRandom(this ListControl lb) { var list = lb.Items.Cast () .OrderBy(x => Guid.NewGuid().ToSsortingng()) .ToArray(); lb.Items.Clear(); lb.Items.AddRange(list); } }
Trier les listes déroulantes
void sort() { if (listBox1.Items.Count <= 1) return; for (int j = 0; j < listBox1.Items.Count - 1; j++) { for (int i = 0; i < listBox1.Items.Count - 1; i++) { listBox1.SetSelected(i, true); string a = listBox1.SelectedItem.ToString(); listBox1.SetSelected(++i, true); i--; string b = listBox1.SelectedItem.ToString(); if (b.CompareTo(a) == 1) { listBox1.Items.RemoveAt(i); listBox1.Items.Insert(i, b); i++; listBox1.Items.RemoveAt(i); listBox1.Items.Insert(i, a); i--; } } } }
protected void Sort(ListBox lbox) { try { List> ListBoxList = new List>(); foreach (ListItem li in lbox.Items) { ListBoxList.Add(new KeyValuePair(li.Value, li.Text)); } if (ListBoxList.Count > 0) { ListBoxList = ListBoxList.OrderBy(x => x.Value).ToList(); lbox.DataTextField = "Value"; lbox.DataValueField = "Key"; lbox.DataSource = ListBoxList; lbox.DataBind(); } } catch (Exception error) { error.WriteEvent(); throw; } }