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

时间:2009-11-05 11:55:17

标签: c# asp.net

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

8 个答案:

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

我希望这适用于其他人。