Combobox只填充数据库中的最后一条记录而不是所有记录

时间:2013-08-22 11:49:15

标签: c# database list combobox

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

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

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

2 个答案:

答案 0 :(得分: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]);
    }
}

答案 1 :(得分: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); 
        }
    }