zoukankan      html  css  js  c++  java
  • RDIFramework.NET V3.3 WinForm版新增订单管理主从表事例

    功能描述

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

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

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

    功能展示

    对于订单管理主从表结构信息,主界面展示分为两部分:一部分是主表信息,一部分是从表信息,单击主表对应信息后,显示对应从表的列表信息,如下图所示。

    新增产品如下图所示,丰富的控件展示,列表直接编辑,自动计算并汇总等实用功能。

    打印功能:

    核心功能代码参考

    编辑界面保存代码参考

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

    		//保存数据
            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版本发布-重大升级

    代码生成器下载

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

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

    3、代码生成器本地下载


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

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

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

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

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

    欢迎关注RDIFramework.net框架官方微信公众号(微信号:guosisoft),及时了解最新动态。

    使用微信扫描二维码立即关注

  • 相关阅读:
    hostnamectl set-hostname liuge
    java.io.IOException: Could not locate executable nullinwinutils.exe in the Hadoop binaries.
    基于API和SQL的基本操作【DataFrame】
    DataFrame 转换为Dataset
    RDD转换为DataFrame【反射/编程】
    WordCount程序【Spark Streaming版本】
    基于RDD实现简单的WordCount程序
    easyui禁止下拉框
    JavaScript join() 方法
    JavaScript push() 方法
  • 原文地址:https://www.cnblogs.com/huyong/p/10112547.html
Copyright © 2011-2022 走看看