C#.NET 2.0 WinformsでListBox
をロードする適切な方法は何ですか?
DataTable
にバインドするだけでいいと思いました。そのような運はありません。Dictionary
にバインドできると思った。運が悪い。
KeyValuePair
というクラスを作成してから、List<KeyValuePair>
を使用して、このオブジェクトをオブジェクトでロードできるようにする必要がありますか?多分私は明白な何かを見逃している。表示テキストと値を異なる値にしたい。
簡単なコード例。 3つのプロパティを持つPerson
クラスがあるとします。 FirstName
、LastName
およびAge
。リストボックスをPerson
オブジェクトのコレクションにバインドするとします。ディスプレイには名を表示し、値は年齢を表示したいとします。これを行う方法は次のとおりです。
List<Person> people = new List<Person>();
people.Add(new Person { Age = 25, FirstName = "Alex", LastName = "Johnson" });
people.Add(new Person { Age = 23, FirstName = "Jack", LastName = "Jones" });
people.Add(new Person { Age = 35, FirstName = "Mike", LastName = "Williams" });
people.Add(new Person { Age = 25, FirstName = "Gill", LastName = "JAckson" });
this.listBox1.DataSource = people;
this.listBox1.DisplayMember = "FirstName";
this.listBox1.ValueMember = "Age";
トリックはDisplayMember
とValueMember
です。
DataTableをバインドする を直接...
listbox.ValueMember = "your_id_field";
listbox.DisplayMember = "your_display_field";
listbox.DataSource = dataTable;
データ型がMyDataTypeと呼ばれているとしましょう。そのデータ型にToString()を実装して、表示テキストを決定します。例えば。:
class MyDataType
{
public string ToString()
{
//return the text you want to display
}
}
次に、データ型で構成されるリストを取得し、次のようにAddRange()を介してListBoxに詰め込みます。
ListBox l;
List<MyDataType> myItems = new List<MyDataType>(); // populate this however you like
l.AddRange(myItems.ToArray());
さらにヘルプが必要な場合はお知らせください。リストボックスに表示しようとしているデータ型を知っておくと役に立ちます。
IListまたはIListSourceを実装する任意のデータソースにデータソースを設定できます。
また、DisplayMemberプロパティとValueMemberプロパティを、表示するフィールドに設定し、それぞれに値を関連付ける必要があります。
パフォーマンスを賢く吸うために使用されたDataSourceパラメータを使用する-少なくともComboBoxでは
上記の別のコメンターが説明しているように、私はオブジェクトのToString()をオーバーライドし、Items.AddRange()メソッドを使用してオブジェクトを追加することを強く条件としています。
辞書にバインドするには、新しいBindingSourceオブジェクトでそれをラップする必要があります。
MyListBox.DataSource = New BindingSource(Dict, Nothing)
MyListBox.DisplayMember = "Value"
MyListBox.ValueMember = "Key"