组合框只填充数据库中的最后一条记录,而不是所有记录

本文关键字:记录 一条 最后 填充 数据库 组合 | 更新日期: 2023-09-27 18:28:41

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

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

示例:如果我的数据库中有5条记录,它们有5个不同的Id,如下所示:1、2、3、4、5。然后组合框只给我显示Id 5,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;
    }

组合框只填充数据库中的最后一条记录,而不是所有记录

试试这个。按以下更改FillComboBox方法

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

这不是对您问题的直接回答,但它解决了您的问题。如果将"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); 
        }
    }