我的下拉列表如下:
<select id="DropdownID">
<option value="1">Ccc</option>
<option value="2">Aaa</option>
<option value="3">Bbb</option>
</select>
但我希望按文字排序的下拉元素不按值按字母顺序排序:
<select id="DropdownID">
<option value="2">Aaa</option>
<option value="3">Bbb</option>
<option value="1">Ccc</option>
</select>
我这样填写:
Dictionary<int, string> myDataDictionary = new Dictionary<int, string>();
// (...)
DropdownID.DataSource = myDataDictionary;
DropdownID.DataTextField = "value";
DropdownID.DataValueField = "key";
DropdownID.DataBind();
即使字典中的值被正确排序,在下拉列表中也始终按值排序。
如何按文字而不是按值对dropdow中的项目进行排序?
答案 0 :(得分:3)
或者,如果这工作太多,您可以使用LINQ并绑定到IOrderedEnumerable:
myDataDictionary.OrderBy(Function(item) item.Value)
(VB.net代码 - 在C#中编写这些东西后运行有点落后)
答案 1 :(得分:0)
使用字典时无法控制项目的排序方式,请改用SortedDictionary。
编辑:我不明白您的意思是通过文本排序下拉,请提供更多详细信息,以便我可以帮助您。
Edit2:现在我看到使用字典并不重要,我可以说这完全取决于你如何从数据存储中检索数据(数据库,xml等)。您的申请是如何构建的?它是3层申请吗?如果是这样,你如何从DAL中检索数据?如果您使用Linq to SQL,它应该非常简单(如另一个答案中所示)。通常,您应检索已从数据库中订购的数据(假设您从数据库中检索数据)。
答案 2 :(得分:0)
您还可以使用SortedList<KeyValuePair<TKey, TValue>>
,并在构造函数(或IComparer<KeyValuePair<TKey, TValue>
方法)中使用Sort
,仅使用该值进行比较。
不是很好,但可能会有效
答案 3 :(得分:0)
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="DropdownID" runat="server">
</asp:DropDownList>
</div>
</form>
</body>
</html>
Dictionary<int, string> myDataDictionary = new Dictionary<int, string>();
myDataDictionary.Add(3, "A");
myDataDictionary.Add(1, "B");
myDataDictionary.Add(2, "C");
DropdownID.DataSource = myDataDictionary;
DropdownID.DataTextField = "value";
DropdownID.DataValueField = "key";
DropdownID.DataBind();
大家好,我有这个工作样本,我对字典做了什么,下拉菜单正确排序。
你可以发布你的工作样本,这样我们就可以重现你的错误了。
编辑:13:21 22/09/2009
您下载数据的顺序是下拉列表用于显示集合的顺序。我认为必须有其他你不知道的东西。找出你的代码是否有问题的最好方法是真正的不妥,就是编写一个测试应用程序从头开始简单地尝试重现原始应用程序的行为。