我正在尝试订购系统,您可以将多个产品放在一个订单中。我对此知之甚少,这就是我现在
的地方有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();
}
答案 0 :(得分:1)
随之而来的代码:
//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();
}
答案 1 :(得分:0)
通过OrderID创建Order-OrderProduct和通过Product ID创建Product-OrderProduct之间的外键关系。
对于每个产品,按顺序在OrderProduct中使用OrderId
插入一行答案 2 :(得分: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();
}