5

我对此进行了一些研究,似乎对数据绑定组合框进行排序的唯一方法是对数据源本身进行排序(在本例中为 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 调用之前和之后在控件构造函数中设置它。

4

7 回答 7

7

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

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

于 2008-08-27T08:30:13.223 回答
2

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

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

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

于 2008-08-27T08:28:40.153 回答
1

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

myCombo.DataSource = this.typedDataSet.Tables["Table1"].DefaultView;
myCombo.DisplayMember = "ColumnB";
myCombo.ValueMember = "ColumnA";
于 2008-08-27T11:53:11.487 回答
1

Josh Smith 有一篇博客文章回答了这个问题,并在 XAML 中完成了所有工作。

于 2009-08-13T14:09:33.593 回答
0

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

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

DataView dv = myDataTable.Select("filter expression", "sort");
于 2008-08-27T08:25:07.587 回答
0

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

您可以使用SortedListSortedDictionary(均按 Key 排序)或DataView

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

view.Sort = "State, ZipCode DESC";

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

于 2008-08-27T08:45:19.067 回答
0

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

于 2009-03-29T16:22:11.773 回答