RDIFramework.NET V3.3 WinForm版新增订单管理主从表事例

功能描述

无论什么系统,除了常规的单表处理外,主从表的应用都是非常普遍的,RDIFramework.NET V3.3 WinForm版本中新增了一个主从表的事例供大家参考。主从表的界面设计大同小异,主要还是在处理CRUD操作时的一些特殊性,如:新增、修改、删除操作要放在同一事务提交,删除主表数据,从表对应数据也应相应删除等。主从表一般涉及两个以上的表,一个是主表,其他的是从表的,在实际情况下,一般包含两个表较多,下面我们以两个表的主从表关系进行分析展示。

订单管理主从表关系结构图

RDIFramework.NET V3.3 WinForm版新增订单管理主从表事例

功能展示

对于订单管理主从表结构信息,主界面展示分为两部分:一部分是主表信息,一部分是从表信息,单击主表对应信息后,显示对应从表的列表信息,如下图所示。
RDIFramework.NET V3.3 WinForm版新增订单管理主从表事例

新增产品如下图所示,丰富的控件展示,列表直接编辑,自动计算并汇总等实用功能。
RDIFramework.NET V3.3 WinForm版新增订单管理主从表事例

RDIFramework.NET V3.3 WinForm版新增订单管理主从表事例

RDIFramework.NET V3.3 WinForm版新增订单管理主从表事例

RDIFramework.NET V3.3 WinForm版新增订单管理主从表事例

打印功能:
RDIFramework.NET V3.3 WinForm版新增订单管理主从表事例

核心功能代码参考

编辑界面保存代码参考

在编辑界面不仅可以新增数据,还可以编辑数据,调用相同的保存数据的方法。

        //保存数据
        private void btnSave_Click(object sender, EventArgs e)
        {
            if (!this.Changed)
            {   
                //数据未被修改过就直接返回即可
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
            else
            {
                CaseOrderEntity orderEntity = GetFormOrderEntity();
                grdOrderDetail.FocusedView.CloseEditor();
                var orderDetailList = new List<CaseOrderDetailEntity>();
                for (int i = 0; i < this.gridViewOrderDetail.RowCount; i++)
                {
                    var detailInfo = gridViewOrderDetail.GetRow(i) as CaseOrderDetailEntity;
                    detailInfo.OrderId = orderEntity.Id;
                    if (detailInfo != null)
                    {
                        orderDetailList.Add(detailInfo);
                    }
                }
                try
                {
                    
                    int returnValue = caseOrderService.SaveOrder(this.UserInfo, OrderId, orderEntity, orderDetailList);
                    if (returnValue > 0)
                    {
                        MessageBoxHelper.ShowSuccessMsg(RDIFrameworkMessage.MSG0011);
                        this.DialogResult = DialogResult.OK;
                        this.Close();
                        OnFormClosedRefreash?.Invoke();
                    }
                }
                catch (Exception ex)
                {
                    ProcessException(ex);
                }
            }
        }

保存数据服务实现参考

        /// <summary>
        /// 新增或修改
        /// </summary>
        /// <param name="userInfo">用户</param>
        /// <param name="keyValue">主键值</param>
        /// <param name="entity">实体对象</param>
        /// <param name="detailEntitys">明细对象</param>
        /// <returns></returns>
        public int SaveOrder(UserInfo userInfo, string keyValue, CaseOrderEntity entity, List<CaseOrderDetailEntity> detailEntitys)
        {
            int returnValue = 0;
            var parameter = ParameterUtil.CreateWithMessage(userInfo, MethodBase.GetCurrentMethod(), this.serviceName, "SaveOrder-新增或修改");

            ServiceUtil.ProcessBusinessDbWithTran(userInfo, parameter, dbProvider =>
            {
                if (!string.IsNullOrEmpty(keyValue))
                {
                    //主表
                    var manager = new CaseOrderManager(dbProvider, userInfo);
                    entity.Id = keyValue;
                    returnValue = manager.UpdateEntity(entity);
                    //明细表
                    var managerDetail = new CaseOrderDetailManager(dbProvider, userInfo);
                    managerDetail.Delete(new KeyValuePair<string, object>(CaseOrderDetailTable.FieldOrderId, keyValue));
                    foreach(CaseOrderDetailEntity orderDetail in detailEntitys)
                    {
                        orderDetail.OrderId = keyValue;
                        orderDetail.Enabled = 1;
                        orderDetail.DeleteMark = 0;
                        managerDetail.Add(orderDetail);
                    }
                }
                else
                {
                    //主表
                    var manager = new CaseOrderManager(dbProvider, userInfo);
                    entity.Enabled = 1;
                    entity.DeleteMark = 0;
                    string orderKey = manager.Add(entity);
                    returnValue = string.IsNullOrEmpty(orderKey) ? 0 : 1;
                    //明细表
                    var managerDetail = new CaseOrderDetailManager(dbProvider, userInfo);
                    foreach (CaseOrderDetailEntity orderDetail in detailEntitys)
                    {
                        orderDetail.OrderId = orderKey;
                        orderDetail.Enabled = 1;
                        orderDetail.DeleteMark = 0;
                        managerDetail.Add(orderDetail);
                    }
                }
              
            });
            return returnValue;
        }

参考文章

RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系列目录

RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍

RDIFramework.NET框架SOA解决方案(集Windows服务、WinForm形式与IIS形式发布)-分布式应用

RDIFramework.NET代码生成器全新V3.5版本发布-重大升级

代码生成器下载

RDIFramework.NET V3.3 WinForm版新增订单管理主从表事例

1、代码生成器使用说明下载

2、代码生成器百度网盘下载地址

3、代码生成器本地下载


一路走来数个年头,感谢RDIFramework.NET框架的支持者与使用者,大家可以通过下面的地址了解详情。

RDIFramework.NET官方网站:http://www.rdiframework.net/

RDIFramework.NET官方博客:http://blog.rdiframework.net/

特别说明,框架相关的技术文章请以官方网站为准,欢迎大家收藏!

RDIFramework.NET框架由专业团队长期打造、一直在更新、一直在升级,请放心使用!

上一篇:产品设计体会(3013)项目的“敏捷沟通”实践


下一篇:scala 学习笔记(04) OOP(上)主从构造器/私有属性/伴生对象(单例静态类)/apply方法/嵌套类