在C#中对列表框项进行排序

我开发了一个网页,其中显示了从数据库中提取的列表框项。 动态地我添加了一些项目。 它添加到列表框的末尾,所以我想在添加项目后对列表框项进行排序。 我尝试使用Arraylist进行排序,但它不起作用。

我知道这个问题已经很老了,但我正在寻找一种没有比较类,ArrayLists等的方法。所以我想我会粘贴我用于其他人的方法:

请注意,我的方法使用LINQ to Objects,因此它只适用于较新版本的Framework。

 // get a LINQ-enabled list of the list items List list = new List(ListBoxToSort.Items.Cast()); // use LINQ to Objects to order the items as required list = list.OrderBy(li => li.Text).ToList(); // 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()); 

ListBox PreRender事件中尝试此代码。

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

请尝试以下代码:

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

如果通过将数据源设置为填充了db数据的DataTable来绑定列表框,那么当您要添加新项而不是添加项时,请将记录添加到数据表中。 然后为该数据表创建数据视图,按如下方式对数据视图中的数据进行排序:

 DataView dv = dt.DefaultView; dv.Sort = "val desc"; 

然后将listbox的数据源设置为dv.ToTable()

在将数据源指定给列表框之前,必须对数据表进行排序。

DataTable.DefaultView.sort =“[列名]”。

如前所述,您使用Add方法将ListItems添加到List中,Add方法始终附加ListItems。 您可以使用带索引的Insert方法在所需索引处添加项目。 List.Insert(ListItem,index)

干杯

你的意思是动态地通过Javascript添加项目到列表或使用ASP.NET控件回发somekind之后?

如果使用Javascript动态添加,那么您的答案将使用jQuery进行排序,如果使用ASP.NET回发后,则应使用位于System.Collections.Generic的List对象。

只需调用ArrayList.Sort即可 。 链接中的代码示例。

这里是vb代码Private Sub SortList(ByVal lb As DropDownList)’获取启用LINQ的列表项列表Dim list As New List(Of ListItem)(lb.Items.Cast(Of ListItem)())’使用LINQ to Objects按要求对项目进行排序list = list.OrderBy(Function(li)li.Text).ToList()’从列表框中删除无序项,因此我们不会得到重复项lb.Items.Clear()’现在添加我们的排序项目lb.Items.AddRange(list.ToArray())End Sub

我知道这与The King的回应非常相似,但这就是它对我有用的方式。

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

我希望这适用于其他人。