【问题标题】:How do I bind the result of DataTable.Select() to a ListBox control?如何将 DataTable.Select() 的结果绑定到 ListBox 控件?
【发布时间】:2010-09-12 00:09:08
【问题描述】:

我有以下代码:

ListBox.DataSource = DataSet.Tables("table_name").Select("some_criteria = match")
ListBox.DisplayMember = "name"

DataTable.Select() method 返回一个 System.Data.DataRow 对象数组。

无论我在ListBox.DisplayMember 属性中指定什么,我所看到的只是具有正确数量的项目的列表框全部显示为System.Data.DataRow,而不是"name" 列中我想要的值!

是否可以从DataTable.Select() 绑定到结果数组,而不是循环遍历它并将每个数组添加到ListBox

(我对循环没有问题,但似乎不是一个优雅的结局!)

【问题讨论】:

    标签: .net data-binding listbox datatable datarow


    【解决方案1】:

    请改用DataView

    ListBox.DataSource = new DataView(DataSet.Tables("table_name"), "some_criteria = match", "name", DataViewRowState.CurrentRows);
    ListBox.DisplayMember = "name"
    

    【讨论】:

    • 在大多数情况下,您不能将标准控件直接绑定到 DataTable 或 DataRow。您必须获得一个 DataTableView 或一个 DataRowView。乔希是正确的。
    【解决方案2】:

    Josh 在 DataView 上做得很好。如果您需要一个非常大的锤子,您可以从任何 DataTable.Select("...") 中获取行数组并合并到不同的 DataSet 中。

    DataSet copy = new DataSet(); copy.Merge(myDataTable.Select("Foo='Bar'")); // copy.Tables[0] has a clone

    您尝试做的这种方法很可能是矫枉过正,但在某些情况下,您可能需要从行数组中获取数据表,这很有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多