WTM+LayUI Table显示汇总数据

发布时间 2023-05-09 18:01:00作者: cherish1024

一、需求描述

WTM框架在ListVM的InitGridHeader()方法中提供SetShowTotal()的方法,但此方法只是在Table最下面显示了合计行,但并没有实际的合计数据,故需要自己计算合计数据。

二、解决思路

将获取到的Table数据,手动进行求和,并将其传到前端。

参考layui的说明文档:https://layui.dev/docs/table/#cols.totalRow

 

三、代码实现

Controller中的实现

 [ActionDescription("SearchHLineYield")]
        [HttpPost]
        public IActionResult SearchHLineYield(ELM.ViewModel.ProManage.HLineYieldVMs.HLineYieldSearcher searcher)
        {
            var vm = Wtm.CreateVM<ELM.ViewModel.ProManage.HLineYieldVMs.HLineYieldListVM>(passInit: true);
            if (ModelState.IsValid)
            {
                vm.Searcher = searcher;
                var result0 = vm.GetJson(false);
                var list = vm.GetEntityList();//获取返回的数据

               var planYieldSum= list.Sum(x => x.HLineYield_PlanYield);//手动计算合计值
                var yieldSum = list.Sum(x => x.HLineYield_Yield);
                var goodCntSum = list.Sum(x => x.HLineYield_GoodCnt);
                var testCntSum = list.Sum(x => x.HLineYield_TestCnt);
                var wScrapCntSum = list.Sum(x => x.HLineYield_WScrapCnt);
                var mScrapCntSum = list.Sum(x => x.HLineYield_MScrapCnt);
                Dictionary<string, object> dic = new Dictionary<string, object>();
                object value0 = new
                {
                    HLineYield_PlanYield = planYieldSum,//此名称必须和ListVM中的列名相同
                    HLineYield_Yield = yieldSum,
                    HLineYield_GoodCnt = goodCntSum,
                    HLineYield_TestCnt = testCntSum,
                    HLineYield_WScrapCnt = wScrapCntSum,
                    HLineYield_MScrapCnt = mScrapCntSum
                };

                dic.Add("totalRow", value0);//将合计值放到 totalRow的对象中

                return Content( result0.AddDTExtInfo(dic));//将totalRow内容塞到返回数据的前面 并返回
            }
            else
            {
                return  Content( vm.GetError());
            }
        }

扩展方法AddDTExtInfo

   /// <summary>
       /// 给DataTable添加额外的数据
       /// </summary>
       /// <param name="oriStr">源字符串</param>
       /// <param name="dic">添加的数据的字典</param>
       /// <returns></returns>
        public static string AddDTExtInfo(this string oriStr,Dictionary<string,object> dic)
        {
            string valueJson = System.Text.Json.JsonSerializer.Serialize(dic).TrimStart('{').TrimEnd('}') + "},";
            return oriStr.Insert(1, valueJson);
        }

注意:最后不要忘了在ListVM的InitGridHeader()方法中写上SetShowTotal()的方法