2017-02-16 6 views
0

コンボボックスコントロールに問題があります。アイテムはデータベースから取得されますが、SelectedValueプロパティでアクセスすることはできません。データバインドされたコンボボックスにアクセスするC#

私はこのようにそれを設定してみました:

DataSet ds = retrieveData(); //I am calling a procedure, it works fine 
myComboBox.DataSource = ds; 
myComboBox.DisplayMember = "COLUMN1"; 
myComboBox.ValueMember= "COLUMN2"; 

しかし、それは動作しません。

foreach (DataRow dr in ds.Tables[0].Rows) 
    { 
     myComboBox.Items.Add(
     new { TEXT = dr["COLUMN1"].ToString(), 
       VALUE = Convert.ToInt32(dr["COLUMN2"].ToString()) 
     }); 
    } 

今では動作します:コンボボックス内のテキストは、だから私はこれをしなかった

System.Data.DataViewManagerListItemTypeDescriptor

ました。しかし、私はインデックス( myComboBox.IndexOf("Text inside"))にアクセスする必要があります(プライマリキーであるため、一意であることが保証されています)。 SelectedValueは常にnullで、SelectedIndexは私がアクセスできないフィールドの匿名オブジェクトです!

助けが必要ですか?

+1

最初の例がうまくいかない理由を知りたいと思っています。 DataSourceがバインドされていないため、2番目のメソッドはSelectedValueを使用できません。 @stackoverflow.com/questions/14379183/combobox-selectedvalue-throws-null-reference-exception – Steve

+0

@Steveも参照してください。ボックスのテキストは次のとおりです。 'System.Data.DataViewManagerListItemTypeDescriptor' – dzenesiz

答えて

2

DataSetではなく、DataTableオブジェクトにコンボボックスをバインドする必要があります。 オブジェクトです。それはあなたの目的を解決します。また、DropDownStyleプロパティがDropDownListに設定されていることを確認してください。 (この方法では、入力するのではなくリストから値を選択する必要があります)。

myComboBox.DataSource = ds.Tables[0]; 
+0

あなたは私を救ったのです!私はそれがそのように機能したのか分からなかった... – dzenesiz

関連する問題