我对此做了一些研究,似乎对数据绑定组合框进行排序的唯一方法是对数据源本身进行排序(在本例中为数据集中的数据表)。

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

组合框绑定在设计器中设置初始化使用

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) 数据视图.排序 财产。为了获得更大的灵活性,您可以使用 绑定源 成分。BindingSource 将是组合框的数据源。然后,您可以将数据源从 DataTable 更改为 List,而无需更改组合框的 DataSource。

bindingsource组件有许多目的。首先,它通过提供货币管理,更改通知以及Windows表单控件和数据源之间的其他服务来简化对数据上的绑定控件。

其他提示

您实际上可以对 默认视图 在数据表上:

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

这将对您直接从数据表检索的任何行进行排序。

设置 Sort 属性后,请确保将 DefaultView 绑定到控件数据源,而不是表:

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

约什史密斯有一个 博客文章 这回答了这个问题,并且全部在 XAML 中完成。

数据是否需要位于 DataTable 中?使用 SortedList 并将其绑定到组合框将是一种更简单的方法。

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

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

对 ComboBox 进行排序的最简单方法是使用 组合框.已排序 财产。但是,如果您使用数据绑定,这将不起作用。在这种情况下,您必须对数据源本身进行排序。

您可以使用 排序列表 或者 排序字典 (两者均按键排序),或 数据视图.

数据视图有一个 种类 接受排序表达式(字符串)的属性,例如:

view.Sort = "State, ZipCode DESC";

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top