2012-04-24 4 views
-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); 

     } 
    } 
} 
+0

データベースとのやりとりを行う小さなコマンドラインプログラムを作成することをお勧めしますあなたが知っているものをすでに取り込んでいるか、そこにあるものを更新しています。それは何かを挿入しようとするのがやわらかくなる。 – octopusgrabbus

+4

あなたは実際に何を求めていますか?あなたは動作しないものは何も述べていません –

+0

私はSQLサーバにピザテーブルを持っていて、それにはpizzaNameとpizzaPriceがあります。私はコンボボックスにピザを選択するときを見つけようとしていますが、選択したアイテムのpizzaPriceフィールドから価格を取得するにはどうすればいいですか? –

答えて

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; 
}   
+0

これは動作しますが、コンボボックスが変更されるたびにデータベースへのラウンドトリップが必要になります。それは...最適ではない。 –

+0

ありがとうございました。 –

4

あなたはDataTableをすでにプライベートフィールド作りを持っているので、これを行うには多くの方法がありますが、ここで4

  1. です。次にComboBox.SelectedIndexの変更で、選択した値を取得して、DataTable.Select or DataTable.FindまたはLinq To DataSetを使用してPrice値を取得することができます。

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

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

  4. それでもあなたは価値のメンバーの好きなデータソースの使用を設定すると、コンボボックスのDataManagerを使用し、あなたがそれを必要なときはさておき、多くとして

を選択した項目の行全体へのアクセスを得ます人々はDataTableを使用することを好まず、代わりにカスタムクラスのコレクションを使用します。上記のすべては通常のコレクションで動作しますが、linqまたはデータセットメソッドの代わりにLinqまたはIEnumerableメソッドを使用すること以外は

+0

ピザ名= cboPizzaType.SelectedValue.ToString();を実行すると、選択したピザをピザ名変数
に保存できました。
しかし、私はpizzaprice変数に価格を格納する人を把握することができません。 –

+0

@PollyPoll私はあなたの元の質問からそれを得ました。私の答えはそれを行うための4つの方法を説明しています。あなたが問題を抱えているという私の答えについて特に何かがありますか? –

関連する問題