如何使用下拉列表动态订购列表框?

时间:2009-02-10 22:55:07

标签: c# asp.net

我有一个包含20种颜色的列表框。它看起来像这样:

1:红色 2:绿色 3:蓝 4:橙色 5:红 6:黄色 7:橙色 8:红 9:绿色 ....

它从ObjectDataSource获取数据,而ObjectDataSource又从返回数据表的方法获取数据。我想要一个基本上有2个项目的下拉菜单,按订单排序和按颜色排序。如果用户选择Order By#,它将按升序或降序对ListBox进行排序。如果用户选择按颜色排序,它将按颜色排序。我该怎么做呢?

我可以使用DataView对其进行排序吗?

谢谢, XaiSoft

3 个答案:

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