0

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

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

示例:如果我的数据库中有 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;
    }
4

2 回答 2

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]);
    }
}
于 2013-08-22T12:49:04.237 回答
0

这不是您问题的直接答案,但它解决了您的问题。如果您将“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); 
        }
    }
于 2013-08-22T12:51:33.637 回答