对列表框中的项目列表进行排序

我想从列表框中获取一堆项目,将它们添加到数组中,对其进行排序,然后将其放回到不同的列表框中。 这是我想出的:

ArrayList q = new ArrayList(); foreach (object o in listBox4.Items) q.Add(o); q.Sort(); listBox5.Items.Add(q.ToString()); 

但它不起作用。 有任何想法吗?

 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); } 

您可以使用ListBox.Sorted内置function

  foreach (object o in listBox4.Items) { listBox5.Items.Add(o); } listBox5.Sorted = true; 

设置ListBox5.Sorted = true将确保列表框中的项目已排序,并且添加到列表框的所有后续项目将按正确的顺序添加。

当然,这假设您具有示例所建议的简单排序要求。

试试这个:

 var list = lstBox.Items.Cast().OrderBy(item => item.Text).ToList(); lstBox.Items.Clear(); foreach (ListItem listItem in list) { lstBox.Items.Add(listItem); } 

如果您需要按值排序,只需使用item.Value切换item.Text即可。

请享用!

将项添加到数组并关闭循环。 然后对数组值进行排序并将其绑定到列表框

试试AddRange

  ArrayList q = new ArrayList(); foreach (object o in listBox4.Items) q.Add(o); q.Sort(); listBox5.Items.AddRange(q.ToArray()); 

如果您正在使用.Net3.5使用linq来完成此任务。这里我使用列表进行转换和排序

  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)); } } 

你也可以使用我写的“扩展方法”:

 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().ToString()) .ToArray(); lb.Items.Clear(); lb.Items.AddRange(list); } } 

排序列表框说明

 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; } }