2017-02-10 69 views
0

enter image description here我正在嘗試訂購系統,您可以在其中將多個產品放在一個訂單中。我對此很少了解,這是我現在的位置picture在一個字段中有多個值(外鍵?)

有3個表,產品表,訂單表和訂購產品表。 我真的不知道這是否正確,因爲我是初學者,尤其是外鍵。

我想達到的是您可以訂購許多產品,並將該產品放入一個「OrderID」中,如下圖所示。 enter image description here

這是我唯一的代碼。對不起,但我真的迷失在此。

public Form1() 
    { 
     InitializeComponent(); 
     fillCart(); 
    } 


    private void fillCart() 
    { 
     dgvCart.ColumnCount = 3; 
     dgvCart.Columns[0].Name = "ProductID"; 
     dgvCart.Columns[1].Name = "ProductName";  
     dgvCart.Columns[2].Name = "Quantity"; 
    } 

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) 
    { 
     //dgvproducts 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     crud.FillDataGrid("Select * from Products", ref dgvProducts); 
     crud.FillDataGrid("Select * from Orders", ref dgvOrder); 
     crud.FillDataGrid("Select * from Orderproducts", ref dgvOrderview); 
     lbldate.Text = DateTime.Now.ToShortDateString(); 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     //button add to cart 
     addData(dgvProducts.CurrentRow.Cells[0].Value.ToString(), dgvProducts.CurrentRow.Cells[1].Value.ToString(), txtqty.Text); 
    } 

    private void addData(string p1, string p2, string p3) 
    { 
     String[] row = { p1, p2, p3 }; 
     dgvCart.Rows.Add(row); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     //button insert 

    } 

非常感謝,我希望有人能幫助我解決我的問題。

方法使用從2008年的SQLserver填充的DataGridView:

 public crud() 
    { 
     cnString = "Data Source=DESKTOP-MQKIBSK\\SQLEXPRESS;Initial Catalog=MARISCHELLdatabase;Integrated Security=True"; 
     cn = new SqlConnection(cnString); 
    } 



    public void FillDataGrid(string sql, ref ns1.BunifuCustomDataGrid dg) 
    { 
     try 
     { 
      DataSet ds = new DataSet(); 
      cn.Open(); 
      cmd = new SqlCommand(sql, cn); 
      adptr = new SqlDataAdapter(cmd); 
      adptr.Fill(ds); 
      dg.DataSource = ""; 
      dg.DataSource = ds.Tables[0]; 


     } 
     catch (Exception e) 
     { 
      MessageBox.Show("" + e.Message); 
     } 
     cn.Close(); 
    } 
+0

讓我們[繼續聊天討論]( http://chat.stackoverflow.com/rooms/135504/discussion-between-futuredev-and-epickip)。 – FutureDev

+0

評論不適用於擴展討論;這個對話已經[轉移到聊天](http://chat.stackoverflow.com/rooms/135608/discussion-on-question-by-futuredev-multiple-values-in-one-field-foreign-keys)。 – meagar

回答

1

如何LINQ的2 SQL數據類找我: Linq 2 SQL

連同它的代碼:

//I have 2 columns in my dataGridView, Id 1st amount 2nd 
//I added 3 items for testing 
List<Tuple<int, int>> cart = new List<Tuple<int,int>>(); 
foreach (DataGridViewRow row in dataGridView1.Rows) 
{ 
    if (row.Cells[0].Value != null && row.Cells[1].Value != null) 
    { 
     cart.Add(new Tuple<int, int>(Convert.ToInt32(row.Cells[0].Value.ToString()),Convert.ToInt32(row.Cells[1].Value.ToString()))); 
       //Now each list item will have .Item1 (productId) and .Item2 (amount) 
    } 
} 
using (DataClasses1DataContext dataContext = new DataClasses1DataContext()) 
{ 
    //The tables you add in the dataContext are accessible by name 
    Order order = new Order(); 
    dataContext.Orders.InsertOnSubmit(order); 
    dataContext.SubmitChanges(); // Submit once so we get an orderId 
    foreach (Tuple<int, int> product in cart) 
    { 
     OrderProduct orderProduct = new OrderProduct(); 
     orderProduct.OrderId = order.OrderID; 
     orderProduct.ProductId = product.Item1; 
     orderProduct.Amount = product.Item2; 
     dataContext.OrderProducts.InsertOnSubmit(orderProduct); 
    } 
    dataContext.SubmitChanges(); 
} 
0

創建訂單之間的外鍵關係 - OrderProduct在產品ID - OrderProduct在訂單ID和產品。

對於每一個產品,以行插入OrderProduct用的OrderId

+0

我想我知道如何在桌子上創建外鍵關係。但是,如果沒有太多先生你能告訴我如何插入它們的代碼? – FutureDev

+0

ALTER TABLE OrderProduct ADD FOREIGN KEY(OrderID) REFERENCES Order(OrderID) 對外鍵做同樣的處理productId的關係 –

0

這可能無法完全回答你的問題,但考慮一個面向對象的方法來此。在我看來,使用強類型訪問數據庫返回值的方法總是更好,但其他人可能會不同意。這裏有一些僞代碼讓你開始,並不是整個解決方案,但應該鼓勵你思考如何讓你的代碼更加面向對象和強類型。使用相同的方法來保存和更新數據庫中的表。

例如

//Business layer 
public class Product 
{ 
    public string ProductName {get;set;} 
    public int Quantity {get;set;} 
    public string Unit {get;set;} 
    public decimal Price {get;set;} 
    public long Total {get;set;} 

    public Product(){} 

    public Product(string productName, int quantity, string unit, decimal price, long total) 
    { 
     ProductName = productName; 
     Quantity = quantity; 
     Unit = unit; 
     Price = price; 
     Total = total; 
    } 

    public List<Product> GetProductList() 
    { 
     //get the list of products from the data access layer 
     ProductDal dal = new ProductDal(); 
     return dal.GetProductList(); 
    } 
} 

//Data layer 
public class ProductDal 
{ 
    public List<Product> GetProductList() 
    { 
     List<Product> lstProducts = new List<Product>(); 
     //connect to your database code here 

     //fill your list with records from your Sql query 
     //inside your DataReader while loop you can add a new Product object to your list for each record 
     //assuming your database field names match the Product class's proeprties you would do this 
     lstProducts.Add(new Product((string)reader["ProductName"], 
            (int)reader["Quantity"], 
            (string)reader["Unit"], 
            decimal)reader["Price"], 
            (long)reader["Total"])); 

     return lstProducts; 
    } 
} 

//front end code behind page 
private void button2_Click(object sender, EventArgs e) 
    { 
     Product product = new Product(); 
     dgvCart.DataScource = product.GetProductList(); 
     dgvCart.DataBind(); 
    } 
+0

謝謝先生,非常感謝。生病研究你的建議先生申請我自己的代碼謝謝。 – FutureDev