如何动态地使用下拉列表排序列表框?
问题描述:
我有20种颜色的列表框。它看起来像这样:如何动态地使用下拉列表排序列表框?
1:红色 2:绿色 3:蓝色 4:橙色 5:红色 6:黄色 7:橙色 8:红色 9:绿色 ....
它从一个ObjectDataSource获取数据,然后从一个返回数据表的方法获取数据。我想要一个基本上有两个项目的下拉列表,按顺序排列和按颜色排序。如果用户选择Order By#,它将按升序或降序排列列表框。如果用户选择按颜色排序,则按顺序排序。我如何去做这件事?
我可以使用DataView对此进行排序吗?
感谢, XaiSoft
答
您可以将排序表达式添加到您的ObjectDataSource的选择参数,你可以像这样定义它并返回一个DataView:
public DataView SelectMethod(string sortExpression)
{
DataTable table = GetData();
DataView dv = new DataView(table);
dv.Sort = sortExpression;
return dv;
}
然后在ObjectDataSource的向导中,可以将该参数绑定到下拉SelectedValue。使每个DropDown项目的值与列名称相同。
答
(我假设你已经想出如何在首位的列表框绑定)。
设置属性的AutoPostBack =“true”设置您的下拉列表。这会在用户选择不同的值时触发SelectedIndexChanged事件。
在那里你可以重新绑定你的列表框。
编辑:删除了我周围的ObjectDataSource的误解 - joshperry的回答涵盖了好多了!在数据被检索到的添加名称的参数“SelectMethod”方法
<asp:ObjectDataSource
ID="ObjectDataSource1"
runat="server"
SelectMethod="SelectMethod"
TypeName="MyDataObject">
<asp:Parameter Direction="input" Type="string" Name="sortExpression">
</asp:Parameter>
</asp:ObjectDataSource>
然后:
答
只是想知道...你已经有了ListBox中的数据,为什么不使用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>
我会给这个镜头以及JavaScript的方式,并让你知道它是如何去。谢谢! – Xaisoft 2009-02-11 15:14:16