2017-02-16 84 views
0

我有一个组合框控件的问题。项目从数据库中检索,但它不会让我通过SelectedValue属性访问它。访问数据绑定组合框c#

我试图将其设置是这样的:

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

但它是行不通的。在组合框中的文本是

System.Data.DataViewManagerListItemTypeDescriptor

所以我这样做:

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

现在,它的工作原理。但我必须访问索引(myComboBox.IndexOf("Text inside"))而不是值(这是主键,因此保证是唯一的)。 SelectedValue总是为null,SelectedIndex是一个匿名对象,我不能访问这些字段!

任何帮助?

+1

要知道为什么第一个例子不起作用,这将是有趣的。第二个不能使用SelectedValue,因为没有绑定DataSource。另请参见http://stackoverflow.com/questions/14379183/combobox-selectedvalue-throws-null-reference-exception – Steve

+0

@Steve,因为那么框中的文本是:'System.Data.DataViewManagerListItemTypeDescriptor' – dzenesiz

回答

2

您应该将您的ComboBox绑定到DataTable对象而不是DataSet。 对象。这将解决你的目的。另外,请确保DropDownStyle属性设置为DropDownList。 (通过这种方式,用户被迫从列表中选择一个值而不是打字。)

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

您救了我!我不知道它的功能如此... – dzenesiz