2017-02-16 8 views
0

Ich habe ein Problem mit einem Kombinationsfeld Steuerelement. Artikel werden aus der Datenbank abgerufen, aber ich kann sie nicht über SelectedValue Eigenschaft zugreifen.Access datengebundene Kombinationsfeld C#

Ich habe versucht, es nach oben wie diese Einstellung:

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

Aber es würde nicht funktionieren. Der Text in der Combo-Box war

System.Data.DataViewManagerListItemTypeDescriptor

Also habe ich dieses:

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

Jetzt funktioniert es. Aber ich muss auf den Index (myComboBox.IndexOf("Text inside")) statt auf den Wert zugreifen (was der Primärschlüssel ist und daher eindeutig ist). SelectedValue ist immer Null und der SelectedIndex ist ein anonymes Objekt, auf das ich auch nicht zugreifen kann!

Irgendwelche Hilfe?

+1

Es wäre interessant zu wissen, warum die ersten Beispiele nicht funktionieren. Der zweite kann SelectedValue nicht verwenden, da keine DataSource gebunden ist. Siehe auch http://stackoverflow.com/questions/14379183/combobox-selectedvalue-throws-null-reference-exception – Steve

+0

@Steve weil dann der Text in der Box ist: 'System.Data.DataViewManagerListItemTypeDescriptor' – dzenesiz

Antwort

2

Sie sollten Ihre ComboBox an ein DataTable Objekt anstelle einer DataSet binden. Objekt. Das wird deinen Zweck lösen. Stellen Sie außerdem sicher, dass die Eigenschaft DropDownStyle auf DropDownList festgelegt ist. (Auf diese Weise wird der Benutzer gezwungen, einen Wert aus der Liste auszuwählen, anstatt zu tippen.)

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

Sie haben mich gerettet! Ich wusste nicht, dass es so funktioniert ... – dzenesiz

Verwandte Themen