【发布时间】:2015-03-12 18:30:19
【问题描述】:
我正在使用 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();
【问题讨论】:
-
几个问题,你试过没有指定 cboxReason.ValueMember = "Reason"; cboxReason.DisplayMember = "原因";而且,你确定“dt”中有数据吗
-
你试过
dt.DefaultView吗? -
你能发一个minimal complete verifiable example吗,因为你的代码没有问题。我已经尝试过了,一切正常 - 组合框被填充并且永远不会丢失它的值。也许你正在用这个组合框做其他事情?
-
我同意@Eugene,虽然我没有尝试过,但它应该工作。也许发布一个关于组合框到底发生了什么的屏幕截图?
-
谢谢你们和我一起看这个。我尝试了上面(和下面)的解决方案,但没有任何效果,所以我再次从第 1 步开始。我解决了我的问题,事实证明,当创建数据库以从中提取值时,我将类型设置为 char(50)。当我将其更改为 varchar 时,我忘记手动删除由 char 创建的所有空白。这反过来意味着,当我从数据库中获取该信息时,返回字符串会太长而无法放入组合框字段中,从而使其保持空白。
标签: c# sql data-binding