我开发了一个网页,其中显示了从数据库中提取的列表框项。动态地我添加了一些项目。它添加到列表框的末尾,所以我想在添加项目后对列表框项进行排序。我尝试Arraylist
进行排序,但它无法正常工作。
答案 0 :(得分:22)
我知道这个问题已经很老了,但我正在考虑一种没有比较类,ArrayLists等的方法。所以我想我会粘贴我用于其他人的方法:
请注意我的方法使用LINQ to Objects,因此它只适用于较新版本的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>());
答案 1 :(得分:3)
在PreRender
的{{1}}事件中试用此代码。
ListBox
答案 2 :(得分:1)
请尝试以下代码:
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";
然后将列表框的数据源设置为dv.ToTable()
答案 3 :(得分:1)
在将数据源指定给列表框之前,必须对数据表进行排序。
DataTable.DefaultView.sort =“[Column Name]”。
如前所述,您使用Add方法将ListItems添加到List中,Add方法始终附加ListItems。您可以使用带索引的Insert方法在所需索引处添加项目。 List.Insert(ListItem,index)
干杯
答案 4 :(得分:0)
你的意思是动态地通过Javascript或在使用ASP.NET控件回发somekind之后将项目添加到列表中吗?
如果使用Javascript动态添加,那么您的答案将使用jQuery进行排序,如果使用ASP.NET回发后,则应使用位于System.Collections.Generic的List对象。
答案 5 :(得分:0)
只需致电ArrayList.Sort即可。链接中的代码示例。
答案 6 :(得分:0)
这是vb代码 Private Sub SortList(ByVal lb As DropDownList) &#39;获取列表项的LINQ启用列表 Dim list As New List(Of ListItem)(lb.Items.Cast(Of ListItem)()) &#39;使用LINQ to Objects根据需要对项目进行排序 list = list.OrderBy(Function(li)li.Text).ToList() &#39;从列表框中删除无序项目,因此我们不会重复 lb.Items.Clear() &#39;现在添加我们的已排序项目 lb.Items.AddRange(list.ToArray()) 结束子
答案 7 :(得分:0)
我知道这与 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!
}
我希望这适用于其他人。