【问题标题】:ComboBox remaining blank after selected value选择值后组合框保持空白
【发布时间】: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


【解决方案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 集合列名。

【讨论】:

    【解决方案2】:

    你试过C# - Fill a combo box with a DataTable的答案吗

    cboxReason.BindingContext = this.BindingContext;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 2014-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多