0

リストのアイテムでコンボボックスを埋めたいという問題がありました。リストはデータベースからアイテムを取得します。

問題は、コンボボックスがデータベースの最後のレコードだけでいっぱいになることです。

: 1、2、3、4、5 のような 5 つの異なる ID を持つデータベースに 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;
    }
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 に答える