【问题标题】:Combobox only fills with last record from database and not all records组合框仅填充数据库中的最后一条记录,而不是所有记录
【发布时间】:2013-08-22 11:49:15
【问题描述】:

我遇到了一个问题,我想用列表中的项目填充组合框。该列表从我的数据库中获取项目。

问题是组合框只填充数据库中的最后一条记录。

示例:如果我的数据库中有 5 条记录具有 5 个不同的 ID,如下所示:1、2、3、4、5。然后组合框只向我显示 ID 5,五次。像这样:5-5-5-5-5。我想要的是:1-2-3-4-5。

这可能是一个小错误,我尝试研究和测试不同的东西,但没有任何效果。将不胜感激任何帮助。提前致谢。

下面的代码来自我认为问题所在的数据库类,它用数据库中的项目填充了我的列表:

    public static List<Product> getProducts()
    {
        List<Product> listProducts= new List<Product>();

        try
        {
            connection = new SqlConnection("Data Source=localhost\\SQLEXPRESS;Initial Catalog=DB_Products;Integrated Security=SSPI;");
            connection.Open();

            SqlCommand selectProductNumber = new SqlCommand(@"Select ProductNumber FROM Product", connection);

            SqlDataReader dr = selectProductNumber.ExecuteReader();

            while (dr.Read())
            {
                Product product = new Product();
                product.ProductNumber = dr["ProductNumber"].ToString();
                listProducts.Add(product);
            }
            dr.Close();
            dr.Dispose();
            return listProducts;
        }

        finally
        {
            if (connection != null)
            {
                connection.Close();
            }
        }
    }

这是填充组合框的方法以及我使用这些方法的地方:

    private ProductList productList = new ProductList();

    private void FillComboBox()
    {
        comboBox.Items.Clear();

        for (int i = 0; i < productList.Count; i++)
        {
            comboBox.Items.Add(productList[i].GetProductNumber(" \t "));
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        productList.Fill();
        FillComboBox();

    }

来自我的 ProductList 类:

    public void Fill()
    {
        productList = DB_class.getProducts();
    }

    public Product this[int index]
    {
        get
        {
            return productList[index];
        }
    }

    public void Add(Product product)
    {
        productList.Add(product);
    }

    public int Count
    {
        get { return productList.Count; }
    }

来自我的产品类:

    public string GetProductNumber(string showProductNumber)
    {
        return ProductNumber;
    }

【问题讨论】:

  • 调试时listproducts的值是多少?他们是 5-5-5-5-5 还是 1-2-3-4-5 ?
  • 当我调试它是这样的:第一次迭代列表给出了 1。第二次迭代给出了 2-2。第三次迭代给出 3-3-3 等等。到5-5-5-5-5
  • 在调用getProducts()后显示你的代码在哪里赋值,看来上面的方法没问题。
  • 展示你如何将它连接到组合框!
  • 在 Form_Load - 你调用 productList.Fill() - 在 ProductList 类中你调用 productList = DB_class.GetProducts()。使用这个,或者在 fill() 方法中产品列表指向哪个参考?

标签: c# database list combobox


【解决方案1】:

试试这个。改变你的FillComboBox方法如下

private void FillComboBox()
{
    comboBox.Items.Clear();
    List<Product> proList = getProducts();
    for (int i = 0; i < proList.Count; i++)
    {
        comboBox.Items.Add(proList[i]);
    }
}

【讨论】:

  • 谢谢,但我认为我解释得不好。我重新编辑了我的问题
【解决方案2】:

这不是您问题的直接答案,而是解决您的问题。 如果您将“Linq to Sql”(.dbml) 文件添加到您的项目中。只需从服务器资源管理器中拖动您需要的表格 - 然后您就可以像这样解决它。

    private void button1_Click(object sender, EventArgs e)
    {
        var DBcontext = new DBDataContext();

        comboBox1.ValueMember = "ID";
        comboBox1.DisplayMember = "Description";

        comboBox1.DataSource = DBcontext.Items.ToList();

        comboBox1.SelectedIndex = 0;

        DBcontext.Dispose();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        //Get displaytext
        MessageBox.Show(comboBox1.Text);

        //Get id value
        MessageBox.Show(comboBox1.SelectedValue.ToString()); 
    }

//如果你想要你的方法,你应该这样做

    class Product
    {


        public string ProductNumber { get; set; }

        public override string ToString()
        {
            return ProductNumber;
        }

    }
    private List<Product> productList = new List<Product>();
    productList  = GetProducts(); //your sql function.

    private void FillComboBox()
    {
        comboBox1.Items.Clear();

        foreach (var p in productList)
        {
            comboBox1.Items.Add(p); 
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    相关资源
    最近更新 更多