代码之家  ›  专栏  ›  技术社区  ›  John Hunter

对数据绑定组合框进行排序的最佳方法是什么?

  •  5
  • John Hunter  · 技术社区  · 16 年前

    我对此做了一些研究,似乎对数据绑定组合框进行排序的唯一方法是对数据源本身(在这种情况下是DataSet中的DataTable)进行排序。

    如果是这样的话,那么问题就变成了对DataTable进行排序的最佳方式是什么?

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

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

    我试过设置

    this.typedDataSet.Table1.DefaultView.Sort = "ColumnB DESC";
    但这并没有什么区别,我尝试在typedDataSet之前和之后在控件构造函数中设置它。合并呼叫。
    8 回复  |  直到 16 年前
        1
  •  7
  •   jfs    16 年前

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

    BindingSource组件提供 许多目的。首先,它简化了 通过以下方式将表单上的控件绑定到数据 提供货币管理、变更 通知和其他服务 在Windows窗体控件和 数据来源。

        2
  •  2
  •   Matt Hamilton    16 年前

    您实际上可以对 default view 在DataTable上:

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

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

        3
  •  1
  •   Andy Rose    16 年前

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

    myCombo.DataSource = this.typedDataSet.Tables["Table1"].DefaultView;
    myCombo.DisplayMember = "ColumnB";
    myCombo.ValueMember = "ColumnA";
    
        4
  •  1
  •   David Veeneman    15 年前

    乔什·史密斯有一个 blog post 它回答了这个问题,并在XAML中完成了所有工作。

        5
  •  0
  •   Andy Rose    16 年前

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

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

    DataView dv = myDataTable.Select("filter expression", "sort");
    
        6
  •  0
  •   urini    16 年前

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

    您可以使用 SortedList SortedDictionary (均按关键字排序),或 DataView .

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

    view.Sort = "State, ZipCode DESC";
    

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

        7
  •  0
  •   Adam Robinson    16 年前

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