-4

メニュー項目のクラスを作成しましたが、誰かがコンボボックスからピザを選択してトッピングを選択したときに価格を取得する方法がわかりません。データベースからピザの価格とトッピングの価格を取得しています。これが私のピザクラスです

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;


namespace ItalianoLIB.BLL
{

   public class Pizza
    {

       public string pizzaName { get; set; }
       public string toppingName { get; set; }
       public double toppingPrice { get; set; }
       public double pizzaPrice { get; set; }



    }
}


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;




namespace ItalianoWIN.PLL
{

    public partial class PizzaMenu : Form 
    {
        public string newPizzaName { get; set; }
        public string newToppingName { get; set; }
        public double newToppingPrice { get; set; }
        public double newPizzaPrice { get; set; }

        public PizzaMenu()
        {  

            InitializeComponent();
        }

        private void Pizza_Load(object sender, EventArgs e)
        {

            //new connection from the DButils class
            SqlConnection con = new SqlConnection(ItalianoLIB.DLL.DButils.CONSTR);
            con.Open();

            //fill Pizza type combo box
            SqlDataAdapter da = new SqlDataAdapter("select * from pizza", con);
            DataTable dt = new DataTable();
            da.Fill(dt);



            for (int i = 0; i < dt.Rows.Count; i++)
            {
             cboPizzaType.Items.Add(dt.Rows[i]["PizzaType"]);
            }



            //fill toppings listbox
            SqlDataAdapter da2 = new SqlDataAdapter("select * from Topping",con);
            DataTable dt2 = new DataTable();
            da2.Fill(dt2);

            for (int i = 0; i < dt2.Rows.Count; i++)
            {
                lstToppings.Items.Add(dt2.Rows[i]["ToppingName"]);
            }



            con.Close();


        }

        private void cboPizzaType_SelectedIndexChanged(object sender, EventArgs e)
        {


        }


        private void lstToppings_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void bnPizOrd_Click(object sender, EventArgs e)
        {
            newPizzaName = cboPizzaType.Text.ToString();



            //Brings the user back to the main form
            this.DialogResult = DialogResult.OK;
        }

        private void bnAddTop_Click(object sender, EventArgs e)
        {


            object obj = lstToppings.SelectedItem;
            lstSelTop.Items.Add(obj);
            lstToppings.Items.Remove(obj); 

        }

        private void bnDelTop_Click(object sender, EventArgs e)
        {
            object obj = lstSelTop.SelectedItem;
            lstToppings.Items.Add(obj);
            lstSelTop.Items.Remove(obj);

        }
    }
}
4

2 に答える 2

4

これを行うには多くの方法があります。

  1. 既に DataTable を取得しているので、それをプライベート フィールドにします。次に、ComboBox.SelectedIndex の変更時に、選択した値を取得し、DataTable.SelectまたはDataTable.FindまたはLinq To DataSetを使用して Price 値を取得できます。

  2. DataSource、、、DisplayMemberおよびValueMemberコンボ ボックスのプロパティを設定するだけです。DataSource はデータテーブル、表示メンバーは名前、値メンバーは価格です。いつでも使用する価格がComboBox.SelectedValue必要です (この場合、データソースが保持するため、プライベート フィールドを保持する必要はありません)。

  3. 上記の 2 つを組み合わせて使用​​することもできます。たとえば、#1 で説明した手法を使用してルックアップを実行できる値メンバーの ID を使用できます。

  4. データソースを引き続き設定して、値メンバーに必要なものを使用しDataManager、コンボボックスのを使用して、必要なときにいつでも選択したアイテムの行全体にアクセスできます

余談ですが、多くの人は DataTables を好まず、代わりにカスタム クラスのコレクションを使用することを好みます。上記のすべては通常のコレクションで機能しますが、linq to dataset または datatable メソッドの代わりに、Linq または IEnumerable メソッドのみを使用する場合を除きます。

于 2012-04-24T21:45:56.777 に答える
0

あなたはこれをしたいですか?

private void cboPizzaType_SelectedIndexChanged(object sender, EventArgs e)         
{           
SqlConnection con = new SqlConnection(ItalianoLIB.DLL.DButils.CONSTR);             
con.Open();              
SqlDataAdapter da = new SqlDataAdapter("select PizzaPrice from pizza WHERE PizzaType='" + cboPizzaType.Text + "'", con);             
DataTable dt = new DataTable();             
da.Fill(dt);  
con.Close();           
var oPrice = dt.Rows[0][0];
this.pizzaPrice = (double)oPrice;
}          
于 2012-04-24T21:41:49.713 に答える