我正在使用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();
答案 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;