0

私はYouTubeでこのチュートリアルに従っていましたが、この部分で行き詰まりました。

ここでは、製品のタイプに応じて、TabControl タブ ページにデータベース内の製品を動的に表示する必要がありますが、タブ ページの製品タイプに従って製品をフィルタリングできないようで、すべての製品が以下のようにすべての製品タイプに表示されます。

データベースとアプリケーションについては、以下のスクリーン ショットを参照してください。この問題に関するヘルプをいただければ幸いです。

ここに画像の説明を入力

ここに画像の説明を入力

商品タイプをタブページとして表示するコード

private void CreateTabPages()
        {
            con.Open();
            SqlDataAdapter sda = new SqlDataAdapter("SELECT DISTINCT ProductType, Description FROM TblProductType", con);
            DataTable dt = new DataTable();
            sda.Fill(dt);

            foreach (DataRow dr in dt.Rows)
            {
                tabControl1.TabPages.Add(dr["ProductType"].ToString(),dr["Description"].ToString());
            }

            //var tabID = (from DataRow dr in dt.Rows
                         // select (Int32)dr["TabID"]).Distinct();
            con.Close();

製品を表示するようにコードを更新しました

private void AddProductsToTabbedPanel()
    {
        foreach (TabPage tp in tabControl1.TabPages)
        {
            con.Open();
            SqlDataAdapter sdaProductType = new SqlDataAdapter("SELECT ProductType FROM TblProductType WHERE Description =" + tp.Text, con);
            DataTable dtForProductType = new DataTable();
            sdaProductType.Fill(dtForProductType);
            string currentProductType = (string)dtForProductType.Rows[0]["ProductType"];
            SqlDataAdapter sda = new SqlDataAdapter("SELECT DISTINCT Description FROM TblProduct WHERE ProductType =" + currentProductType, con);
            DataTable dt = new DataTable();
            sda.Fill(dt);

            FlowLayoutPanel flp = new FlowLayoutPanel();
            flp.Dock = DockStyle.Fill;

            foreach (DataRow dr in dt.Rows)
            {
                Button b = new Button();
                b.Size = new Size(100, 100);
                b.Text = dr["Description"].ToString();
                flp.Controls.Add(b);
            }

            tp.Controls.Add(flp);
            con.Close();
        }
    }
4

4 に答える 4

0

ProductType 列のデータ型を に変更してint、表示するデータに対して foreach ステートメントを使用してループできるようにします。

これがコードです。

 private void AddProductsToPannel()
    {
        int i = 1;
        foreach (TabPage tp in tabcon_ProductList.TabPages)
        {
            connection.Open();
            OleDbDataAdapter da = new OleDbDataAdapter("SELECT DISTINCT Description FROM Tbl_Product Where ProductType =" + i, connection);
            DataTable dt = new DataTable();
            da.Fill(dt);

            FlowLayoutPanel flowLayout = new FlowLayoutPanel();
            flowLayout.Dock = DockStyle.Fill;

            foreach (DataRow dr in dt.Rows)
            {
                Button b = new Button();
                b.Size = new Size(100, 100);
                b.Text = dr["Description"].ToString(); 
                flowLayout.Controls.Add(b);
            }

            tp.Controls.Add(flowLayout);
            connection.Close();
            i++;

        }

これが誰かに役立つことを願っています。

于 2015-05-12T18:22:14.747 に答える