我在使用下拉列表对ListBox进行排序时遇到问题。下拉列表将有两个选项:
按#排序
按类型排序
ListBox包含一个项目列表,这些项目最初按#按升序排序。它具有以下格式:
如果用户选择Sort By#,它应按降序排序(如果已按升序排序),如果按降序排序则按升序排序。如果用户选择Sort By Type,它应该按颜色排序,然后是#,所以上面的列表变为:
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
答案 0 :(得分:0)
创建一个自定义比较器(实现IComparable),如here所述,并使用它来适当地对您的集合进行排序。该文章中还列出了其他替代方案(例如使用Linq)。
答案 1 :(得分:0)
你提到lstAuctions(ListBox)的DataSource是odsColors ObjectDataSource,可能是在控件的属性上设置的(在设计时)。在您的代码隐藏中,您将lstAuctions绑定到dv(DataView)。这似乎可以解释错误:“DataSource和DataSourceID都是在'lstColors'上定义的。删除一个定义。”但是,我没有在代码中看到'lstColors'控件。问题可能是由页面上的其他内容引起的。