我有一个包含20种颜色的列表框。它看起来像这样:
1:红色 2:绿色 3:蓝 4:橙色 5:红 6:黄色 7:橙色 8:红 9:绿色 ....
它从ObjectDataSource获取数据,而ObjectDataSource又从返回数据表的方法获取数据。我想要一个基本上有2个项目的下拉菜单,按订单排序和按颜色排序。如果用户选择Order By#,它将按升序或降序对ListBox进行排序。如果用户选择按颜色排序,它将按颜色排序。我该怎么做呢?
我可以使用DataView对其进行排序吗?
谢谢, XaiSoft
答案 0 :(得分:4)
您可以将排序表达式作为Select参数添加到ObjectDataSource,您可以这样定义它:
<asp:ObjectDataSource
ID="ObjectDataSource1"
runat="server"
SelectMethod="SelectMethod"
TypeName="MyDataObject">
<asp:Parameter Direction="input" Type="string" Name="sortExpression">
</asp:Parameter>
</asp:ObjectDataSource>
然后在检索数据的“SelectMethod”方法中添加该名称的参数并返回DataView:
public DataView SelectMethod(string sortExpression)
{
DataTable table = GetData();
DataView dv = new DataView(table);
dv.Sort = sortExpression;
return dv;
}
然后在ObjectDataSource的向导中,您可以将该参数绑定到下拉列表SelectedValue。使每个DropDown项的值与列名相同。
答案 1 :(得分:3)
(我假设你已经想出了如何首先绑定ListBox。)
在DropdownList上设置属性AutoPostback =“true”。当用户选择不同的值时,这将导致SelectedIndexChanged事件触发。
在那里你可以重新绑定你的列表框。
编辑:删除了围绕ObjectDataSource的误解 - joshperry的回答涵盖了更好的内容!
答案 2 :(得分:1)
只是想知道......你已经拥有了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>