我对此进行了一些研究,似乎对数据绑定组合框进行排序的唯一方法是对数据源本身进行排序(在本例中为DataSet中的DataTable)。
如果是这种情况,那么问题就变成了对DataTable进行排序的最佳方法是什么?
组合框绑定在设计器初始化时使用
设置
myCombo.DataSource = this.typedDataSet;
myCombo.DataMember = "Table1";
myCombo.DisplayMember = "ColumnB";
myCombo.ValueMember = "ColumnA";
我尝试过设置
this.typedDataSet.Table1.DefaultView.Sort = "ColumnB DESC";
但这没有区别,我已经尝试在控件构造函数中,在typedDataSet.Merge调用之前和之后设置它。
答案 0 :(得分:7)
如果您使用的是DataTable,则可以使用(DataTable.DefaultView)DataView.Sort属性。为了获得更大的灵活性,您可以使用BindingSource组件。 BindingSource将是组合框的DataSource。然后,您可以将数据源从DataTable更改为List,而无需更改组合框的DataSource。
BindingSource组件服务 很多目的。首先,它简化了 将表单上的控件绑定到数据依据 提供货币管理,变革 通知和其他服务 Windows窗体控件和。之间 数据来源。
答案 1 :(得分:2)
您实际上可以对DataTable上的default view进行排序:
myDataTable.DefaultView.Sort = "Field1, Field2 DESC";
这将直接从DataTable中检索任何行。
答案 2 :(得分:1)
确保在设置Sort属性后将DefaultView绑定到Controls Datasource,而不是表:
myCombo.DataSource = this.typedDataSet.Tables["Table1"].DefaultView;
myCombo.DisplayMember = "ColumnB";
myCombo.ValueMember = "ColumnA";
答案 3 :(得分:1)
Josh Smith有一个blog post来回答这个问题,并在XAML中完成所有这些。
答案 4 :(得分:0)
数据是否需要在DataTable中? 使用SortedList并将其绑定到组合框将是一种更简单的方法。
如果需要使用DataTable,可以使用Select方法检索DataView并传入sort参数。
DataView dv = myDataTable.Select("filter expression", "sort");
答案 5 :(得分:0)
对ComboBox进行排序的最简单方法是使用ComboBox.Sorted属性。但是,如果您正在使用数据绑定,那将无效。在这种情况下,您将不得不对数据源本身进行排序。
您可以使用SortedList或SortedDictionary(按键排序)或DataView。
DataView具有Sort属性,可接受排序表达式(字符串),例如:
view.Sort = "State, ZipCode DESC";
在上面的示例中,State和ZipCode都是用于创建DataView的DataTable中的列。
答案 6 :(得分:0)
我意识到您已经选择了这个问题的答案,但我建议在表单上放置一个DataView,将其绑定到DataSet / DataTable,并在设计器中的View上设置排序。然后将组合框绑定到DataView,而不是DataSet / DataTable。