コンボボックスは複数の列を持つことはできません。私がやりたいことは、テーブルの1つのフィールドを表示することですが、同じテーブルの2番目のフィールドから対応する値を返すことです。複数の列を持つコンボボックス
コンボボックスにCustomerNamesを表示したいと思います。ユーザーが名前を選択すると、代わりにCustomerIDフィールドが返されます。このために最も良い解決策は何ですか?
コンボボックスは複数の列を持つことはできません。私がやりたいことは、テーブルの1つのフィールドを表示することですが、同じテーブルの2番目のフィールドから対応する値を返すことです。複数の列を持つコンボボックス
コンボボックスにCustomerNamesを表示したいと思います。ユーザーが名前を選択すると、代わりにCustomerIDフィールドが返されます。このために最も良い解決策は何ですか?
複数の列を実装する必要はありません。
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();
ベストな方法は、コンボボックスDisplayMember
とValueMember
プロパティ
ComboBox.DisplayMember
。返すプロパティには
ValueMember
を使用してください。次に、
ComboBox.SelectedValue
を使用して現在の/選択した値を取得することができます
ValueMember
ComboBoxItemの値はTextと同じである必要はありません。値としてIDを使用することを検討してください。
あなたは、それぞれ"CustomerName"
と"CustomerID"
にコンボボックスのDisplayMember
とValueMember
プロパティを設定することにより、目的の動作を実現することができます。
ValueMember
プロパティを見てください。これをCustomerIDに設定する必要があります。コンボボックスにバインドした後、ユーザーに表示される実際のフィールドはCustomerNameになりますが、 'CustomerName'の値を取得する場合はCustomerIDが返されます。
コンボボックスの値を取得する場合は、単にSelectedValue
を参照してください。
これらの両方をコンボボックスに表示することを強くお勧めする場合は、これを行うためのいくつかの邪魔な方法がありますが、要件を再確認し、絶対に必要かどうかを確認することをおすすめします。
にアクセスすることができ、あなたの意図のIdsとテキストフィールドでKeyValuePairオブジェクトを定義することができます。 Itemsプロパティはオブジェクトのコレクションであるため、コンボにフィードします。次に、検索のために、
のようなキャストを使用し、xのKeyとValueのプロパティにアクセスします。
ComboBoxItemのTagプロパティを使用して値を格納できます。
さらにこれをプッシュすると、Customer Address Lines 1,2,3(3つのフィールド)が表示されますが、AddressID(4番目のフィールド)が返されますか? – PJW
メンバーインスタンス(Name + Address + e.t.c)の説明を提供する集約フィールドを作成する必要があります –
更新されたコードを調査してください –