You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用LINQ-to-Entities将客户订单明细插入WinForms母婴店管理系统账单表

解决方案

1. 前置准备:创建订单明细实体

首先在你的数据库中新增订单明细表OrderDetailTB,表结构参考如下:

字段名类型说明
DetailID自增主键明细唯一ID
BillID字符串/数值关联账单主表的账单ID(和你BillingTB的Biiling_ID字段对应)
ProductID数值商品ID(可选,建议存储方便后续溯源)
ProductName字符串商品名称
UnitPrice十进制商品单价
BuyQuantity十进制购买数量
SubTotal十进制该行商品小计
CreateTime日期时间订单创建时间

创建完表后更新EF实体模型,确保BabyHubEntities中可以访问到OrderDetailTBs数据集。

2. 修正原有逻辑的已知问题

你现有代码存在2个核心问题,需先调整:

  • 仅扣减了当前选中的单个商品库存,没有对购物车(DataGribBills)内所有商品做库存校验和扣减
  • 总采购成本、总利润仅算了单个商品的数值,和实际整单金额不匹配

3. 新增订单明细存储逻辑

在你确认账单提交、成功写入BillingTB之后,遍历DataGribBills的所有行,逐行写入订单明细表即可,核心代码示例如下:

// 放在DBS.BillingTBs.Add(acc); DBS.SaveChanges(); 之后
if (result == DialogResult.Yes)
{
    acc.SellerName = MainLogin.TBH_Login.Username;
    DBS.BillingTBs.Add(acc);
    DBS.SaveChanges();
    MessageBox.Show("Transaction Added Successfully");

    // ====== 新增:写入订单明细 start ======
    // 遍历购物车所有商品行
    foreach (DataGridViewRow row in DataGribBills.Rows)
    {
        // 跳过空行
        if (row.IsNewRow) continue;
        
        OrderDetailTB detail = new OrderDetailTB();
        detail.BillID = txtBill_ID.Text; // 关联同一个账单ID
        detail.ProductName = row.Cells[1].Value.ToString();
        detail.UnitPrice = Convert.ToDecimal(row.Cells[2].Value);
        detail.BuyQuantity = Convert.ToDecimal(row.Cells[3].Value);
        detail.SubTotal = Convert.ToDecimal(row.Cells[4].Value);
        detail.CreateTime = acc.billDate; // 和主单同一个订单日期
        DBS.OrderDetailTBs.Add(detail);
    }
    DBS.SaveChanges();
    // ====== 新增:写入订单明细 end ======

    // 这里记得把原来的利润、库存扣减逻辑改成遍历所有商品计算,避免数据错误
    // 可根据你实际的商品ID存储逻辑,逐行查询商品库存做扣减、逐行计算采购成本累加
}

可选优化建议

  • 新增事务包裹整个提交逻辑,避免出现主单写入成功、明细写入失败的数据不一致问题
  • 提交前先遍历所有商品校验库存,所有商品库存都足够时再执行后续写入操作
  • 提交完成后清空DataGribBills和总金额变量,避免重复提交

内容的提问来源于stack exchange,提问作者Papa Yaw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:36:02