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