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ですか?

(ループには問題ありませんが、エレガントな結末には見えません!)

4

2 に答える 2

33

代わりにDataViewを使用してください。

ListBox.DataSource = new DataView(DataSet.Tables("table_name"), "some_criteria = match", "name", DataViewRowState.CurrentRows);
ListBox.DisplayMember = "name"
于 2008-09-22T13:32:45.077 に答える
1

Josh は、DataView を正しく使用しています。非常に大きなハンマーが必要な場合は、任意の DataTable.Select("...") から行の配列を取得して、別の DataSet にマージできます。


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

あなたがやろうとしていることに対するそのアプローチは、おそらくやり過ぎですが、役立つ行の配列からデータテーブルを取得する必要がある場合があります。

于 2008-09-22T14:05:18.213 に答える