2009-02-10 116 views
2

我有20种颜色的列表框。它看起来像这样:如何动态地使用下拉列表排序列表框?

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

它从一个ObjectDataSource获取数据,然后从一个返回数据表的方法获取数据。我想要一个基本上有两个项目的下拉列表,按顺序排列和按颜色排序。如果用户选择Order By#,它将按升序或降序排列列表框。如果用户选择按颜色排序,则按顺序排序。我如何去做这件事?

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

感谢, XaiSoft

回答

4

您可以将排序表达式添加到您的ObjectDataSource的选择参数,你可以像这样定义它并返回一个DataView:

public DataView SelectMethod(string sortExpression) 
    { 
     DataTable table = GetData(); 
     DataView dv = new DataView(table); 
     dv.Sort = sortExpression; 
     return dv; 
    } 

然后在ObjectDataSource的向导中,可以将该参数绑定到下拉SelectedValue。使每个DropDown项目的值与列名称相同。

+0

我会给这个镜头以及JavaScript的方式,并让你知道它是如何去。谢谢! – Xaisoft 2009-02-11 15:14:16

3

(我假设你已经想出如何在首位的列表框绑定)。

设置属性的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> 

然后:

+0

谢谢,我会给这个镜头。这是什么语法你正在使用。它是LINQ吗? – Xaisoft 2009-02-10 23:09:36

+0

这是LINQ,是的。确保你有使用System.Linq;在您的代码文件的顶部或它不会编译。 如果您使用的是旧版本的.NET框架或旧版本的Visual Studio,那么您将无法使用LINQ,在这种情况下,您需要使用其他方法对列表进行排序。 – teedyay 2009-02-10 23:16:47

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>