选定值后,ComboBox保持空白

时间:2015-03-12 18:30:19

标签: c# sql data-binding

我正在使用Windows窗体在C#中编写一个小应用程序。我有一个组合框,我通过查询数据库中的列名来填充,以用作组合框中的值。我的代码目前可以很好地获取值,但是每当我单击组合框时它会删除任何文本并只显示一个空白的“选定选项”。我已经尝试了多种方法来纠正这个问题(将数据库字段从char更改为varchar),尝试绑定到不同的数据集等但没有任何工作。我也看过其他帖子,比如 C# comboBox databinding - nothing happens, then it goes back to blank

下面是我的代码,我相信我正在做displaymember / valuemember部分错误但是我不明白这是错的。数据库中的列名称是Reason,它由3个值组成。 任何帮助表示赞赏。

String ConnString =    ConfigurationManager.ConnectionStrings["Portal1"].ConnectionString;
SqlConnection conn = new SqlConnection(ConnString);

conn.Open();

SqlCommand sc = new SqlCommand("select [Reason] from tblReasons", conn);
SqlDataReader reader;

reader = sc.ExecuteReader();
DataTable dt = new DataTable();


dt.Columns.Add("Reason", typeof(string));

dt.Load(reader);

cboxReason.ValueMember = "Reason";
cboxReason.DisplayMember = "Reason";
cboxReason.DataSource = dt;


conn.Close(); 

2 个答案:

答案 0 :(得分:1)

您的代码看起来不错。我不会添加自动发生的列。这是我的示例代码:

        SqlConnection conn = new SqlConnection(ConnString);

        conn.Open();

        var reader = new SqlCommand("select ID from Users", conn).ExecuteReader();

        DataTable dt = new DataTable();
        dt.Load(reader);

        comboBox1.ValueMember = "ID";
        comboBox1.DisplayMember = "ID";
        comboBox1.DataSource = dt;
        conn.Close();

注意:这会填充列中的列表。对于列名列表,我建议更改查询以返回表的列列表(特定于数据库的查询)查看 DataTable.Columns 集合列名。

答案 1 :(得分:0)

您是否尝试过C# - Fill a combo box with a DataTable

的答案?
cboxReason.BindingContext = this.BindingContext;