2017-02-10 1 views
0

enter image description here Ich versuche ein Bestellsystem, wo Sie viele Produkte in einer Bestellung platzieren können. Ich habe sehr wenig Wissen darüber, und das ist, wo ich jetzt bin pictureMehrere Werte in einem Feld (Fremdschlüssel?)

Es gibt 3 Tabellen, Produkttabelle, Bestellungstabelle und die Bestellartikel Tabelle. Ich weiß wirklich nicht, ob das richtig ist, da ich Anfänger gerade auf Fremdschlüsseln bin.

Was ich erreichen möchte ist, dass Sie viele Produkte bestellen und diese Produkte in eine "Bestell-ID" wie dieses Beispiel in Bild unten setzen können. enter image description here

Dies sind meine einzigen Codes. Entschuldigung, aber ich bin wirklich dabei verloren.

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 

    } 

Vielen Dank und ich hoffe, dass mir jemand bei meinem Problem helfen kann.

Methode Verwendung zum Füllen von Datagridview SQLserver 2008:

 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

uns Lassen Sie [fortsetzen, diese Diskussion im Chat] (http://chat.stackoverflow.com/rooms/135504/discussion-between-futuredev-and-epickip). – FutureDev

+0

Kommentare sind nicht für längere Diskussionen; Diese Konversation wurde [in den Chat verschoben] (http://chat.stackoverflow.com/rooms/135608/discussion-on-question-by-futuredev-multiple-values-in-one-field-foreign-keys). – meagar

Antwort

1

Wie Linq 2 SQL dataclasses für mich aussehen: Linq 2 SQL

Der Code, der mit ihm geht:

//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

erstellen Fremdschlüsselbeziehung zwischen Order - OrderProduct über OrderID und Produkt - OrderProduct über Product ID.

Für jedes Produkt, um

+0

Ich denke, ich weiß, wie man Fremdschlüsselbeziehungen auf dem Tisch erstellt. Aber wenn es nicht viel ist, Herr, können Sie mir den Code zeigen, wie man sie einfügt? – FutureDev

+0

ALTER TABLE OrderProduct ADD FOREIGN KEY (OrderID) BEZUG Order (OrderID) für Fremdschlüssel Beziehung gleiche für productId –

0

Dies kann nicht die Antwort auf Ihre Frage vollständig eine Zeile in OrderProduct mit OrderId einfügen, sondern einen objektorientierten Ansatz dazu betrachten. Es ist meiner Meinung nach immer besser, eine stark typisierte Methode zu haben, um auf Werte zuzugreifen, die von einer Datenbank zurückgegeben werden, obwohl andere nicht zustimmen können. Hier ist ein Pseudo-Code, mit dem Sie loslegen können. Er ist keineswegs die gesamte Lösung, sondern sollte Sie dazu ermutigen, darüber nachzudenken, wie Sie Ihren Code objektorientierter und stärker typisiert machen können. Verwenden Sie dieselbe Methode zum Speichern und Aktualisieren von Tabellen in Ihrer Datenbank.

Beispiel

//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

Danke Sir seine sehr geschätzt. Ich werde Ihren Vorschlag studieren, um mich auf meinen eigenen Code zu bewerben. – FutureDev