【问题标题】:How do i bind data source to a ComboBox?如何将数据源绑定到 ComboBox?
【发布时间】:2013-07-17 18:37:15
【问题描述】:

所以我目前有两个组合框。一个是制造,另一个是模型。我的 sql 查询看起来像这样“从 sheet1 中选择不同的模型,其中(Manufacture =@Manufacture)”当我执行它并且如果我要填充数据网格表时,它会起作用。但是,如果我尝试将其放入组合框中,我会得到 System.data.d...... 等供我选择。我怎样才能让它显示值而不是所有这些。我做错了什么?

 private void ManuComboBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        string manu = comboBox3.Text;
        string conStr = "Data Source=CA-INVDEV\\RISEDB01;Initial Catalog=RISEDB01;    Integrated Security=True";
        string sqlcmd = "SELECT DISTINCT Model FROM Sheet1 WHERE (Manufacture =@Manufacture)";
        using (SqlConnection conn = new SqlConnection(conStr))
        {

            SqlCommand cmd = new SqlCommand(sqlcmd, conn);

            cmd.Parameters.AddWithValue("@Manufacture", manu);

            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                dr.Close();
                SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd);
                SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);                    
                DataTable table = new DataTable();
                table.Locale = System.Globalization.CultureInfo.InvariantCulture;
                dataAdapter.Fill(table);
                bindingSource3.DataSource = table;                   
                ModelComboBox.DataSource = bindingSource3;

            }
        }
    }

【问题讨论】:

  • 你试过设置DisplayMember吗?
  • 我没有。会试试的。
  • 我运气不好。你会建议我如何接近?
  • conn.Open();和 conn.Close();不需要,因为你已经使用了。
  • 感谢肖恩。我还是鱿鱼:)

标签: c# visual-studio-2012 .net-4.5 sqldatasource bindingsource


【解决方案1】:

尝试添加

ComboBox1.ItemsSource = bindingSource3

如果这是您的答案,请将其标记为答案

【讨论】:

    【解决方案2】:

    你可以试试这个吗?

            using (SqlConnection conn = new SqlConnection(conStr))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(sqlcmd, conn);
    
                cmd.Parameters.AddWithValue("@Manufacture", manu);
    
                SqlDataReader dr = cmd.ExecuteReader();
    
                IList<string> modelList = new List<string>()
                while (dr.Read())
                {
                    modelList.add(dr[0].ToString());
                }
    
                ModelComboBox.DataSource = modelList;
            }
    

    【讨论】:

    • 我还注意到变量“manu”没有分配到任何地方
    • 马上试试这个
    • 成功了!你这个大老板!今天学到了一些新东西谢谢你:)
    • 很高兴知道它有效。另外,请记住,IDataReader 在数据库读取方面比 DataAdapter 更快。
    • 哦是吗?我的意思是,我的数据库只由两张不超过几兆自动取款机的表组成。但感谢您提供的信息。
    【解决方案3】:

    如果您设置了显示成员,如:

    ModelComboBox.DataSource = bindingSource3;
    ModelComboBox.DisplayMember = "ColumnName";
    

    而且它仍然显示有趣的值,它显示的究竟是什么值?

    • 注意,在工具条中,您可能还必须这样做:

      ModelComboBox.BindingContext = this.BindingContext;

    here is a reference

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      • 2013-03-16
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多