【问题标题】:Multiple values in one field (foreign keys?)一个字段中有多个值(外键?)
【发布时间】:2017-02-10 15:11:14
【问题描述】:

我正在尝试做一个订购系统,您可以在其中将许多产品放在一个订单中。我对此知之甚少,这就是我现在的位置

有3个表,Product表,Order表和Order-products表。 我真的不知道这是否正确,因为我是初学者,尤其是外键。

我想要实现的是您可以订购许多产品并将这些产品放入一个“OrderID”中,如下图所示。

这是我唯一的代码。抱歉,我真的迷路了。

    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

    }

非常感谢你,我希望有人能帮助我解决我的问题。

使用 SQLserver 2008 填充 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();
    }

【问题讨论】:

标签: c# sql-server-2008 foreign-keys


【解决方案1】:

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();
}

【讨论】:

    【解决方案2】:

    在 Order - OrderProduct over OrderID 和 Product - OrderProduct over Product ID 之间创建外键关系。

    对于订单中的每个产品,使用 OrderId 在 OrderProduct 中插入一行

    【讨论】:

    • 我想我知道如何在表上创建外键关系。但是如果不是很多先生,你能告诉我如何插入它们的代码吗?
    • ALTER TABLE OrderProduct ADD FOREIGN KEY (OrderID) REFERENCES Order(OrderID) 对 productId 的外键关系执行相同操作
    【解决方案3】:

    这可能无法完全回答您的问题,但请考虑采用面向对象的方法。在我看来,使用强类型方法来访问从数据库返回的值总是更好,尽管其他人可能不同意。这是一些可以帮助您入门的伪代码,它绝不是完整的解决方案,但应该鼓励您思考如何使您的代码更加面向对象和强类型。使用相同的方法来保存和更新数据库中的表。

    例子

        //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();
        }
    

    【讨论】:

    • 谢谢先生,非常感谢。我会研究你的建议先生申请我自己的代码谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2016-03-13
    • 2019-11-27
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多