2012-04-24 6 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를 가지고 있습니다. 콤보 상자에 피자를 선택하면 SQL Server의 피자 테이블에있는 콤보 상자에 피자 이름을 채 웁니다. 선택한 항목의 피자 가격 필드에서 가격을 얻으려면 어떻게해야합니까? –

답변

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에 이미 개인 필드하게 가지고 있기 때문에 여기에 네

  1. 있어이 작업을 수행하는 방법에는 여러 가지가 있습니다. 그런 다음 ComboBox.SelectedIndex 변경에서 선택한 값을 검색 한 다음 DataTable.Select or DataTable.Find 또는 Linq To DataSet을 사용하여 Price 값을 검색 할 수 있습니다.

  2. 콤보 상자의 속성은 DataSource, DisplayMemberValueMember으로 설정할 수 있습니다. 데이터 소스는 데이터 테이블, 표시 멤버는 이름 및 값 멤버가됩니다. 언제든지 가격을 원하면 언제든지 ComboBox.SelectedValue을 사용하십시오 (이 경우 비공개 필드를 유지할 필요가 없으므로 데이터 소스가 유지되기 때문에)

  3. 위의 두 가지 조합을 사용할 수도 있습니다. 예를 들어 # 1에서 설명한 기술을 사용하여 조회 할 수있는 값 구성원에 대한 ID를 사용할 수 있습니다.

  4. 여전히 당신이 값 구성원에 대해 원하는 데이터 소스 사용을 설정하고 당신이 옆으로 많은으로 그것을

필요할 때마다 콤보 상자의 DataManager를 사용하고 선택한 항목의 전체 행에 액세스 할 수 사람들은 DataTable을 사용하는 것을 좋아하지 않으며 대신 사용자 정의 클래스 모음을 사용합니다. 위의 모든 작업은 데이터 집합이나 데이터 테이블 메서드 대신 linq 또는 IEnumerable 메서드를 사용하는 것 외에는 일반 컬렉션과 함께 작동합니다.

+0

피자 이름 변수
에 선택한 피자를 저장할 수있었습니다. pizzaName = cboPizzaType.SelectedValue.ToString();
하지만 pizzaprice 변수에 누가 가격을 저장할 지 알 수 없습니다. –

+0

@PollyPoll 나는 당신의 원래 질문에서 그것을 얻었다. 그리고 내 대답은 그것을 수행하기위한 네 가지 방법을 설명합니다. 네가 곤란한 내 대답에 대해 특별한 것이 있습니까? –

관련 문제