如何将 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?