C# 如何使用下拉列表动态排序列表框?
我有一个20种颜色的列表框。它看起来像这样: 1:红色 2:绿色 3:蓝色 4:橙色 5:红色 6:黄色 7:橙色 8:红色 9:绿色 它从ObjectDataSource获取数据,而ObjectDataSource又从返回datatable的方法获取数据。我想要一个基本上有两个项目的下拉列表,按#和按颜色排序。如果用户选择按#排序,它将按升序或降序排列列表框。如果用户选择按颜色订购,则将按颜色订购。我该怎么做呢 我可以使用DataView对其进行排序吗 谢谢, XaiSoft(我假设您首先已经知道如何绑定列表框。) 在DropdownList上设置属性AutoPostback=“true”。这将导致当用户选择不同的值时触发SelectedIndexChanged事件 在那里你可以重新绑定你的列表框C# 如何使用下拉列表动态排序列表框?,c#,asp.net,C#,Asp.net,我有一个20种颜色的列表框。它看起来像这样: 1:红色 2:绿色 3:蓝色 4:橙色 5:红色 6:黄色 7:橙色 8:红色 9:绿色 它从ObjectDataSource获取数据,而ObjectDataSource又从返回datatable的方法获取数据。我想要一个基本上有两个项目的下拉列表,按#和按颜色排序。如果用户选择按#排序,它将按升序或降序排列列表框。如果用户选择按颜色订购,则将按颜色订购。我该怎么做呢 我可以使用DataView对其进行排序吗 谢谢, XaiSoft(我假设您首先已
编辑:删除了我对ObjectDataSource的误解——乔什·佩里的回答涵盖了更多 您可以将排序表达式作为选择参数添加到ObjectDataSource中,您可以这样定义它:
<asp:ObjectDataSource
ID="ObjectDataSource1"
runat="server"
SelectMethod="SelectMethod"
TypeName="MyDataObject">
<asp:Parameter Direction="input" Type="string" Name="sortExpression">
</asp:Parameter>
</asp:ObjectDataSource>
然后在ObjectDataSource的向导中,可以将该参数绑定到下拉列表SelectedValue。使每个下拉项的值与列名相同。只是想知道。。。列表框中已经有了数据,为什么不使用javascript对其进行排序呢?为了避免重蹈覆辙,请返回服务器并提出同样的要求 只要获得正确的列表框id,您就完成了
<script language="JavaScript" type="text/javascript">
function sortlist() {
var lb = document.getElementById('mylist'); // <-- Use $get(<%# myList.ClientID %>); if you want
arrTexts = new Array();
for(i=0; i<lb.length; i++) {
arrTexts[i] = lb.options[i].text;
}
arrTexts.sort();
// arrTexts.reverse() // <-- uncomment if you want descending
for(i=0; i<lb.length; i++) {
lb.options[i].text = arrTexts[i];
lb.options[i].value = arrTexts[i];
}
}
</script>
<select name="mylist" id="mylist" size="5">
<option value="Anton">Anton</option>
<option value="Mike">Mike</option>
<option value="Peter">Peter</option>
<option value="Bill">Bill</option>
<option value="Carl">Carl</option>
</select>
<br />
<a href="javascript:sortlist();">sort</a>
函数sortlist(){
var lb=document.getElementById('mylist');//谢谢,我来试一试。您使用的语法是什么。是LINQ吗?这是LINQ,是的。请确保代码文件顶部有using System.LINQ;,否则它将无法编译。如果您使用的是较旧版本的.NET framework或较旧版本的Visual Studio,LINQ将不可用,在这种情况下,您需要使用另一种方法对列表进行排序。我将尝试使用JavaScript的方式对其进行排序,并让您知道它是如何进行的。谢谢!如果我有多个SortExpression,该怎么办。请查看DataView排序属性文档。您可以提供类似“Color ASC,Number DESC”的字符串按第一种颜色ASC排序,然后按数字DESC排序。我描述的方法之所以有效,是因为排序默认为ASC,所以如果只传递一个列名,它将按升序对该列进行排序。
<script language="JavaScript" type="text/javascript">
function sortlist() {
var lb = document.getElementById('mylist'); // <-- Use $get(<%# myList.ClientID %>); if you want
arrTexts = new Array();
for(i=0; i<lb.length; i++) {
arrTexts[i] = lb.options[i].text;
}
arrTexts.sort();
// arrTexts.reverse() // <-- uncomment if you want descending
for(i=0; i<lb.length; i++) {
lb.options[i].text = arrTexts[i];
lb.options[i].value = arrTexts[i];
}
}
</script>
<select name="mylist" id="mylist" size="5">
<option value="Anton">Anton</option>
<option value="Mike">Mike</option>
<option value="Peter">Peter</option>
<option value="Bill">Bill</option>
<option value="Carl">Carl</option>
</select>
<br />
<a href="javascript:sortlist();">sort</a>