2012-01-11 21 views
0

コンボボックスは複数の列を持つことはできません。私がやりたいことは、テーブルの1つのフィールドを表示することですが、同じテーブルの2番目のフィールドから対応する値を返すことです。複数の列を持つコンボボックス

コンボボックスにCustomerNamesを表示したいと思います。ユーザーが名前を選択すると、代わりにCustomerIDフィールドが返されます。このために最も良い解決策は何ですか?

答えて

1

複数の列を実装する必要はありません。

class Member 
{ 
    public string Name{get;set;} 
    public string Address{get;set;} 
    public int ID{get;set;} 

    public string Description 
    { 
     get 
     { 
      return string.Format("{0}, {1}", Name, Address); 
     } 
    } 
} 

var members = new [] 
{ 
    new Member(){ID = 1, Name = "John", Address = "Addr 1"}, 
    new Member(){ID = 2, Name = "Mary", Address = "Addr 2"} 
}; 

m_ComboBox.DataSource = members; 
m_ComboBox.DisplayMember = "Description" 
m_ComboBox.ValueMember = "ID"; 

今あなたがseleceted IDに

また
var selectedID = m_ComboBox.CelectedValue(); 
+0

さらにこれをプッシュすると、Customer Address Lines 1,2,3(3つのフィールド)が表示されますが、AddressID(4番目のフィールド)が返されますか? – PJW

+0

メンバーインスタンス(Name + Address + e.t.c)の説明を提供する集約フィールドを作成する必要があります –

+0

更新されたコードを調査してください –

2

ベストな方法は、コンボボックスDisplayMemberValueMemberプロパティ

を使用することですし、表示したいプロパティに ComboBox.DisplayMember。返すプロパティには ValueMemberを使用してください。次に、 ComboBox.SelectedValueを使用して現在の/選択した値を取得することができます ValueMember

1

ComboBoxItemの値はTextと同じである必要はありません。値としてIDを使用することを検討してください。

0

あなたは、それぞれ"CustomerName""CustomerID"にコンボボックスのDisplayMemberValueMemberプロパティを設定することにより、目的の動作を実現することができます。

0

ValueMemberプロパティを見てください。これをCustomerIDに設定する必要があります。コンボボックスにバインドした後、ユーザーに表示される実際のフィールドはCustomerNameになりますが、 'CustomerName'の値を取得する場合はCustomerIDが返されます。

コンボボックスの値を取得する場合は、単にSelectedValueを参照してください。

これらの両方をコンボボックスに表示することを強くお勧めする場合は、これを行うためのいくつかの邪魔な方法がありますが、要件を再確認し、絶対に必要かどうかを確認することをおすすめします。

0

にアクセスすることができ、あなたの意図のIdsとテキストフィールドでKeyValuePairオブジェクトを定義することができます。 Itemsプロパティはオブジェクトのコレクションであるため、コンボにフィードします。次に、検索のために、

のようなキャストを使用し、xのKeyとValueのプロパティにアクセスします。

0

ComboBoxItemのTagプロパティを使用して値を格納できます。

関連する問題