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

12

我有以下代码:

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

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

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

是否可以绑定到从DataTable.Select()返回的数组,而不是循环遍历并将每个添加到ListBox中?

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

2个回答

33

使用DataView代替。

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

在大多数情况下,您无法直接将标准控件绑定到 DataTable 或 DataRow。您必须获取一个 DataTableView 或 DataRowView。Josh 是正确的。 - user1228

1

Josh在DataView方面是正确的。如果你需要一个非常大的锤子,你可以从任何DataTable.Select("...")中获取行数组,并将其合并到不同的DataSet中。


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

对于你尝试做的事情来说,这种方法很可能过度了,但有时你可能需要从行数组中获取一个datatable,这是很有帮助的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接