排序数据绑定combobox的最佳方法是什么?

我对此进行了一些研究,似乎对数据绑定combobox进行排序的唯一方法是对数据源本身进行排序(在本例中为DataSet中的DataTable)。

如果是这种情况那么问题就变成了对DataTable进行排序的最佳方法是什么?

combobox绑定在设计器初始化时使用设置

myCombo.DataSource = this.typedDataSet; myCombo.DataMember = "Table1"; myCombo.DisplayMember = "ColumnB"; myCombo.ValueMember = "ColumnA"; 

我试过设置

 this.typedDataSet.Table1.DefaultView.Sort = "ColumnB DESC"; 

但这没有区别,我已尝试在typedDataSet.Merge调用之前和之后在控件构造函数中设置它。

如果您使用的是DataTable,则可以使用(DataTable.DefaultView) DataView.Sort属性。 为了获得更大的灵活性,您可以使用BindingSource组件。 BindingSource将是combobox的DataSource。 然后,您可以将数据源从DataTable更改为List,而无需更改combobox的DataSource。

BindingSource组件有很多用途。 首先,它通过在Windows窗体控件和数据源之间提供货币管理,更改通知和其他服务,简化了表单上对数据的绑定控制。

您实际上可以对DataTable上的默认视图进行排序:

 myDataTable.DefaultView.Sort = "Field1, Field2 DESC"; 

这将对您直接从DataTable中检索的任何行进行排序。

在设置Sort属性后,确保将DefaultView绑定到Controls Datasource,而不是表:

 myCombo.DataSource = this.typedDataSet.Tables["Table1"].DefaultView; myCombo.DisplayMember = "ColumnB"; myCombo.ValueMember = "ColumnA"; 

Josh Smith有一篇博客文章回答了这个问题,并在XAML中做到了这一切。

数据是否需要在DataTable中? 使用SortedList并将其绑定到combobox将是一种更简单的方法。

如果需要使用DataTable,可以使用Select方法检索DataView并传入sort参数。

 DataView dv = myDataTable.Select("filter expression", "sort"); 

对ComboBox进行排序的最简单方法是使用ComboBox.Sorted属性。 但是,如果您正在使用数据绑定,那将无效。 在这种情况下,您将不得不对数据源本身进行排序。

您可以使用SortedList或SortedDictionary (均按键排序)或DataView 。

DataView有一个Sort属性,它接受一个排序表达式(字符串),例如:

 view.Sort = "State, ZipCode DESC"; 

在上面的示例中,State和ZipCode都是用于创建DataView的DataTable中的列。

我意识到你已经选择了这个问题的答案,但我建议在表单上放置一个DataView,将它绑定到DataSet / DataTable,并在设计器中的View上设置排序。 然后将combobox绑定到DataView,而不是DataSet / DataTable。