RDIFramework.NET V3.3 WinForm版新增訂單管理主從表事例

weixin_33866037發表於2018-12-13

功能描述

無論什麼系統,除了常規的單表處理外,主從表的應用都是非常普遍的,RDIFramework.NET V3.3 WinForm版本中新增了一個主從表的事例供大家參考。主從表的介面設計大同小異,主要還是在處理CRUD操作時的一些特殊性,如:新增、修改、刪除操作要放在同一事務提交,刪除主表資料,從表對應資料也應相應刪除等。主從表一般涉及兩個以上的表,一個是主表,其他的是從表的,在實際情況下,一般包含兩個表較多,下面我們以兩個表的主從表關係進行分析展示。

訂單管理主從表關係結構圖

1459766-3a936f461d4fde4d.png-pw
訂單管理主從表關係結構圖

功能展示

對於訂單管理主從表結構資訊,主介面展示分為兩部分:一部分是主表資訊,一部分是從表資訊,單擊主表對應資訊後,顯示對應從表的列表資訊,如下圖所示。


1459766-bf1b20da70ee1ea4.png-pw
file

新增產品如下圖所示,豐富的控制元件展示,列表直接編輯,自動計算並彙總等實用功能。


1459766-b63c5ab24bbc3a99.png-pw
file
1459766-a38283069f715523.png-pw
file
1459766-0d2ed482c80c1692.png-pw
file
1459766-dcf5ab59aa177726.png-pw
file

列印功能:


1459766-047c5ea2a6cd63ee.png-pw
列印功能

核心功能程式碼參考

編輯介面儲存程式碼參考

在編輯介面不僅可以新增資料,還可以編輯資料,呼叫相同的儲存資料的方法。

        //儲存資料
        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版本釋出-重大升級

程式碼生成器下載

1459766-3c5a67f4623bd1a7.png
image

1、程式碼生成器使用說明下載

2、程式碼生成器百度網盤下載地址

3、程式碼生成器本地下載


一路走來數個年頭,感謝RDIFramework.NET框架的支持者與使用者,大家可以通過下面的地址瞭解詳情。

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

RDIFramework.NET官方部落格:http://blog.rdiframework.net/

特別說明,框架相關的技術文章請以官方網站為準,歡迎大家收藏!

RDIFramework.NET框架由專業團隊長期打造、一直在更新、一直在升級,請放心使用!

歡迎關注RDIFramework.net框架官方微信公眾號(微訊號:guosisoft),及時瞭解最新動態。

使用微信掃描二維碼立即關注

1459766-b7e342edbb588fef.png
file

相關文章