2017-02-10 6 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 

    } 

Спасибо большое, и я надеюсь, что кто-то может помочь мне с моей проблемой.

использование метода для заполнения 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

Давайте [продолжить это обсуждение в чате] (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 dataclasses искать меня: 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

Создание внешнего ключа между Order - OrderProduct над OrderID и продукт - OrderProduct по ID товара.

Для каждого продукта, чтобы вставить строку в OrderProduct с OrderId

+0

Я думаю, что я знаю, как создавать отношения внешнего ключа на столе. Но если это не так, сэр, вы можете показать мне код о том, как вставить их? – FutureDev

+0

ALTER TABLE OrderProduct ADD FOREIGN KEY (ИД_заказа) ЛИТЕРАТУРЫ Заказать (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