如何将 DataTable.Select() 的结果绑定到 ListBox 控件?

Posted

技术标签:

【中文标题】如何将 DataTable.Select() 的结果绑定到 ListBox 控件?【英文标题】:How do I bind the result of DataTable.Select() to a ListBox control? 【发布时间】: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

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

【问题讨论】:

【参考方案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

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

【讨论】:

以上是关于如何将 DataTable.Select() 的结果绑定到 ListBox 控件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 DataTable.Select(Expression) 中使用 SELECT GROUP BY?

c# datatable select问题

项目中遇到的 linq datatable select

DataTable.Select() 不同然后添加值

我们可以在 c# 中的 datatable.select 中添加参数吗

我如何知道DataTable当前是第几行