web-dev-qa-db-ja.com

ListBoxをロードする適切な方法は何ですか?

C#.NET 2.0 WinformsでListBoxをロードする適切な方法は何ですか?

DataTableにバインドするだけでいいと思いました。そのような運はありません。
Dictionaryにバインドできると思った。運が悪い。

KeyValuePairというクラスを作成してから、List<KeyValuePair>を使用して、このオブジェクトをオブジェクトでロードできるようにする必要がありますか?多分私は明白な何かを見逃している。表示テキストと値を異なる値にしたい。

26
BuddyJoe

簡単なコード例。 3つのプロパティを持つPersonクラスがあるとします。 FirstNameLastNameおよび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";

トリックはDisplayMemberValueMemberです。

66
BFree

DataTableをバインドする を直接...

listbox.ValueMember = "your_id_field";
listbox.DisplayMember = "your_display_field";
listbox.DataSource = dataTable;
6
Aaron Palmer

データ型が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());

さらにヘルプが必要な場合はお知らせください。リストボックスに表示しようとしているデータ型を知っておくと役に立ちます。

5
Jason Sundram

IListまたはIListSourceを実装する任意のデータソースにデータソースを設定できます。

また、DisplayMemberプロパティとValueMemberプロパティを、表示するフィールドに設定し、それぞれに値を関連付ける必要があります。

3
JamesSugrue

パフォーマンスを賢く吸うために使用されたDataSourceパラメータを使用する-少なくともComboBoxでは

上記の別のコメンターが説明しているように、私はオブジェクトのToString()をオーバーライドし、Items.AddRange()メソッドを使用してオブジェクトを追加することを強く条件としています。

1
Gus Paul

辞書にバインドするには、新しいBindingSourceオブジェクトでそれをラップする必要があります。

MyListBox.DataSource = New BindingSource(Dict, Nothing)
MyListBox.DisplayMember = "Value"
MyListBox.ValueMember = "Key"
1
user39369