【问题标题】:Add values to a combobox in c#.net from SQL Server从 SQL Server 向 c#.net 中的组合框添加值
【发布时间】:2015-07-05 16:01:12
【问题描述】:

尝试了几组代码来从 SQL Server 中的表中填充组合框,但无济于事!组合框位于 WindowsApplicationForm 中。这是我正在使用的代码

public void BindData1()
{
    myConnection prms = new myConnection();

    using (SqlConnection con = prms.GetConnection())
    {
        string query = "select CountryName from Countries";

        SqlCommand cmd = new SqlCommand(query, con);

        SqlDataAdapter d = new SqlDataAdapter(query, con);
        DataSet dt = new DataSet();
        d.Fill(dt);

        comboBox1.DataSource = dt.Tables[0]; 
        comboBox1.DisplayMember = "CountryName";
    }
}

该方法在表单加载事件中被调用,但在运行时组合框中没有值。

【问题讨论】:

  • 我没有看到打开连接。是不是必需的?
  • 对连接字符串使用一个类并打开连接,并创建一个实例
  • 您已经验证了数据是否进入了数据集中?在 d.Fill(dt) 行中放置一个断点并查看它。
  • @Nimesh 不,DataAdapter 会在关闭时打开并关闭它
  • @newuser 您的代码应该按原样工作,但是,您是否使用快捷方式 |DataDirectory|在你的连接字符串中?如果是,则快捷方式指向的数据库中可能没有数据。

标签: c# winforms visual-studio combobox


【解决方案1】:

尝试使用DataTable 而不是DataSet

DataTable dt = new DataTable();
d.Fill(dt);

comboBox1.DataSource = dt; 
comboBox1.DisplayMember = "CountryName";

【讨论】:

  • 组合框中没有显示任何值!
  • @newuser 尝试调试看看你的DataSet中是否加载了数据,也许你的查询没有返回任何东西。
  • 我在 sql 中尝试了相同的查询,给了我整个列。
  • @newuser 你还在调用那个方法吗?因为在我看来一切都很好。
  • @newuser 您是否检查过表单加载事件是否附加到您的表单?另外,在调试的时候,你能看到DataSet在Adapter的填充方法之后实际上包含了里面的数据吗?
【解决方案2】:

请尝试用以下代码替换它。我不确定您在 myConnection 课程中有什么,但只需尝试一下,让我知道它是否有效。

    public void BindData1()
    {
        using (SqlConnection con = new SqlConnection("your Connection String"))
        {
            con.Open();
            string query = "select CountryName from Countries";
            SqlCommand cmd = new SqlCommand(query, con);

            SqlDataAdapter d = new SqlDataAdapter(query, con);
            DataSet dt = new DataSet();
            d.Fill(dt);
            if (dt.Tables[0].Rows.Count > 0)
            {
                comboBox1.DataSource = dt.Tables[0];
                //comboBox1.ValueMember = "CountryName";
                comboBox1.DisplayMember = "CountryName";
            }
            else
            {
                System.Windows.Forms.MessageBox.Show("No Countries found");
            }

        }
    }

【讨论】:

    【解决方案3】:

    而不是使用:

    comboBox1.DataSource = dt.Tables[0]; 
    

    你应该使用:

    comboBox1.DataSource = dt; 
    

    【讨论】:

    • comboBox1.DataSource = dt.Tables[0]; 是对的,因为dtDataSet
    【解决方案4】:
    comboBox1.DataSource = dt.Tables[0];
    comboBox1.ValueMember = "ID";
    comboBox1.DisplayMember = "CountryName";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-26
      • 2021-05-25
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      • 2014-12-06
      相关资源
      最近更新 更多