(BY框架)给生产单的产品添加包装(一)

1、需求

原直接通过当前生产单查询该单据下的产品明细。客户要求在该生产单下,产品之上加一层包装关系。即点击生产单查询包装,并可对包装进行编辑,再点击包装可对该包装下的产品进行操作。

2、页面布局设计

原布局

 

设计后布局

布局就采用最直观的方式让客户明白其中操作的逻辑,从左往右查询。

      新增加的包装表格前端代码

通过Layout属性 来确定表格的排列方向水平,再由RegionPosition确定该表格的位置居中,(center是相对于left和right的),由此完成布局。

3、数据库设计

生产单(Se_producenotice)

产品表(Se_producenoticeSub)

包装表(Se_producepackaging)

 原逻辑:Se_producenotice.ID = Se_producenoticeSub.PID

改变后逻辑:Se_producenotice.ID =  Se_producepackaging.PID

                     Se_producepackaging.ID = Se_producenoticeSub.PID

4、注意

删除包装时需要校验当前包装下是否有产品,如果有,先提示。删除产品后才可删除包装。避免产品无包装囊括,不利于之后统计校验包装下的产品数量。

//判断该包装下是否有产品
            Taurus tEntity = new Taurus();
            Se_producenoticeSub spd = new Se_producenoticeSub();
            spd = tEntity.Se_producenoticeSub.Where((Se_producenoticeSub ss) => ss.PackID == rowGid).FirstOrDefault();
            if (spd != null)
            {
                ShowNotify("请先删除包装中产品!");
                return;
            }

5、产生问题

重新建立生产单、产品表、包装表的联系后,新数据正常,老数据消失。

原因:原来产品的PID为生产单,通过生产单主键进行查询,现在PID为包装,而包装是新表,作为产品的PID下只能查询到新增的产品。

解决方法:保持之前的生产单和产品的联系,同时新增加入包装表的关系。

给产品表增加一个字段(PackID)用于储存包装主键,

且Se_producenotice.ID =  Se_producepackaging.PID,而原生产单和产品表关系不变。

数据呈现:点击生产单会绑定一次产品列表(原关系:生产单、产品),点击包装表会重新绑定一次产品列表(新关系:包装单、产品)。

后端保存及修改代码:

//现包装信息保存
    protected void btnCenterSave_Click(object sender, EventArgs e)
    {
        bool isAdd = Session[IsAdd] == null ? false : ConvertEx.ToBoolean(Session[IsAdd]);
        Taurus tContext = new Taurus();
        Guid LeftGridID = ConvertEx.ToGuid(LeftGrid.DataKeys[LeftGrid.SelectedRowIndex][0]);
        Taurus tEntity = new Taurus();
        Se_producenotice spro = new Se_producenotice();
        if (isAdd)
        {
            Se_producepackaging pack = new Se_producepackaging();
            Guid ID = Guid.NewGuid();
            pack.ID = ID;
            pack.PID = LeftGridID;
            pack.length = ConvertEx.ToDecimal(letxt_length.Text);
            pack.width = ConvertEx.ToDecimal(letxt_width.Text);
            pack.height = ConvertEx.ToDecimal(letxt_height.Text);
            pack.volume = ConvertEx.ToDecimal(letxt_volume.Text);
            pack.qty = ConvertEx.ToDecimal(letxt_qty.Text);
            pack.Containernumber = ConvertEx.ToDecimal(letxt_Containernumber.Text);
            tEntity.Se_producepackaging.Add(pack);
            var res = tEntity.SaveChanges();
            if (res > 0)
            {
                ShowNotify("新增成功!");
            }
            else { ShowNotify("新增失败!"); }
        }
        else
        {
            Guid rowGid = ConvertEx.ToGuid(LeftGrid.DataKeys[LeftGrid.SelectedRowIndex][0]);
            Guid ID = ConvertEx.ToGuid(packGrid.DataKeys[packGrid.SelectedRowIndex][0]);
            Se_producepackaging pack = tEntity.Se_producepackaging.Where(m => m.PID == rowGid).FirstOrDefault();
            if (pack == null)
            {
                return;
            }
            pack.ID = ID;
            pack = tContext.Se_producepackaging.Where(m => m.ID == (ID)).FirstOrDefault();
            tContext.Entry(pack).State = System.Data.Entity.EntityState.Modified;
            pack.length = ConvertEx.ToDecimal(letxt_length.Text);
            pack.width = ConvertEx.ToDecimal(letxt_width.Text);
            pack.height = ConvertEx.ToDecimal(letxt_height.Text);
            pack.volume = ConvertEx.ToDecimal(letxt_volume.Text);
            pack.qty = ConvertEx.ToDecimal(letxt_qty.Text);
            pack.Containernumber = ConvertEx.ToDecimal(letxt_Containernumber.Text);
            if (tContext.SaveChanges() > 0)
            {
                ShowNotify("修改成功!");
            }
            else { ShowNotify("修改失败!"); }
        }
        BindCenterGrid(0, "updatedTime", ConvertEx.ToGuid(LeftGrid.DataKeys[LeftGrid.SelectedRowIndex][0]));
        packWindow.Hidden = true;
    }

 

劣势:绑定方法重写,代码相对冗余,解决方法,暂无。

6、阶段成果

比较直观地展示出生产单、包装和产品之间的关系,同时保留了老数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值