2008-09-22 40 views
12

我有以下代码:如何将DataTable.Select()的结果绑定到ListBox控件?

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

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

回答

33

使用DataView代替。

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

在大多数情况下,您不能将标准控件直接绑定到DataTable或DataRow。你必须得到一个DataTableView或一个DataRowView。乔希是对的。 – Will 2008-09-22 13:33:54

1

Josh与DataView有正确的关系。如果你需要一个非常大的锤子,你可以从任何DataTable.Select(“...”)中获取行的数组,并合并到一个不同的DataSet中。

 

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

你正在试图做的是什么方法最有可能是矫枉过正,但也有情况下,您可能需要获得一个DataTable出来行的数组,其中是有帮助的。

相关问题