使用带有2个选项的下拉列表对绑定到ObjectDataSource的ListBox进行排序

时间:2009-02-12 14:00:07

标签: c# asp.net

我在使用下拉列表对ListBox进行排序时遇到问题。下拉列表将有两个选项:

  1. 按#排序

  2. 按类型排序

  3. ListBox包含一个项目列表,这些项目最初按#按升序排序。它具有以下格式:

    1. 1:红色
    2. 2:绿色
    3. 3:蓝色
    4. 4:红色
    5. 5:红色
    6. 如果用户选择Sort By#,它应按降序排序(如果已按升序排序),如果按降序排序则按升序排序。如果用户选择Sort By Type,它应该按颜色排序,然后是#,所以上面的列表变为:

      1. 1:红色
      2. 4:红色
      3. 5:红色
      4. 2:绿色
      5. 3:蓝色
      6. lisbox从ObjectDataSource获取数据,该数据定义如下:

        <asp:ObjectDataSource ID="odsColors" runat="server" SelectMethod="GetColors"
                TypeName="XaiSoft.Data">  
        </asp:ObjectDataSource>
        

        我已经找到了一种排序方法,但这是我被困住的地方,我不知道该怎么做:

        public void SortColorList()
        {
        
        }
        

        我更新了上面的方法以显示我的目的,但是我收到以下错误:

        DataSource和DataSourceID都在'lstColors'上定义。删除一个定义。

        protected void SortColorList()
        {
        
            XaiSoft.Data.Colors c = new XaiSoft.Data.Colors();
            DataTable dt = c.GetColorList();
            DataView dv = new DataView(dt);
        
            dv.Sort = "[" + dv.Table.Columns["ColorName"].ColumnName + "] asc";
            lstAuctions.DataSource = dv; //Error happens here.
            lstAuctions.DataBind();
        

        }

        我通过设置DataSourceId = string.empty;

        解决了这个错误

        感谢您的帮助, XaiSoft

2 个答案:

答案 0 :(得分:0)

创建一个自定义比较器(实现IComparable),如here所述,并使用它来适当地对您的集合进行排序。该文章中还列出了其他替代方案(例如使用Linq)。

答案 1 :(得分:0)

你提到lstAuctions(ListBox)的DataSource是odsColors ObjectDataSource,可能是在控件的属性上设置的(在设计时)。在您的代码隐藏中,您将lstAuctions绑定到dv(DataView)。这似乎可以解释错误:“DataSource和DataSourceID都是在'l​​stColors'上定义的。删除一个定义。”但是,我没有在代码中看到'lstColors'控件。问题可能是由页面上的其他内容引起的。