SQL级联表树形(三)

作者:秋名
撰写时间:2020 年05 月05日
需求:
1,树形选择,改为多选状态,查询表格
2,树形父节点要计算有几个楼层子节点,子节点里面对应宿舍,宿舍对应着床位。(X层-y间-z床 – 已入 a 人)



使用的是layui前端框架:https://www.layui.com/demo/laydate.html
树形zTree_v3使用文档: http://www.treejs.cn/v3/api.php

引用zTree_v3封装好的插件

 <link href="~/A_Resources/R_PC/zTree_v3/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" />
     <script src="~/A_Resources/R_PC/zTree_v3/js/jquery.ztree.core-3.5.js"></script>
    <script src="~/A_Resources/R_PC/zTree_v3/js/jquery.ztree.excheck-3.5.js"></script>

html:

 <div class="zTreeDemoBackground left">
      <ul id="tree" class="ztree" style="width: 90%;    height: 90%; margin:0 5%;background: #fff;border:none;"></ul>
  </div>

JS

  //树形控件
        function TreeView() {
            $.ajax({
                type: "Get",
                url: "Get_TreeView",
                async: false,
                success: function (data) {
                    //console.log(data)
                    var treeObj = $.fn.zTree.init($("#tree"), setting, data);
                }
            });
        }
        var setting = {
            check: {
                enable: true,//是否显示复选框
                chkStyle: "checkbox",
             // chkboxType: { "Y": "ps", "N": "ps" },//是否选择子节点时,选择父节点
                chkboxType: { "Y": "", "N": "" },
                isSimpleData: true,              //数据是否采用简单 Array 格式,默认false
                treeNodeKey: "id",               //在isSimpleData格式下,当前节点id属性
                treeNodeParentKey: "pId",        //在isSimpleData格式下,当前节点的父节点id属性
                showLine: true,                  //是否显示节点间的连线
                checkable: true
            },
            data: {
                simpleData: {
                    enable: true
                }
            },
            callback: {
                onCheck: zTreeOnClick
				//可以是onCheck/也可以onclike
            },
            view: {
                //是否支持同时选中多个节点
                selectedMulti: false
            }
        };
        function zTreeOnClick(event, treeId, treeNode) {
            $("#Hide_ID").val(treeNode.id)
            var treeObj = $.fn.zTree.getZTreeObj("tree");//获取树节点元素
            nodes = treeObj.getCheckedNodes(true);//获取树节点选中元素
            //console.log(treeObj, nodes);
            id = "";
            for (var i = 0; i < nodes.length; i++) {
                id += nodes[i].id+",";
                //因为要获取多个ID,要加上","分隔一下。不然就拼接在一起
            }
            console.log(id);
            //宿舍表格查询
            var ID_QinShi = id //接收树节点选中的值
            layuiTable.reload("tab_QinShi", {
                url: "Select_SuSheH", //请求后台
                page: {
                    curr: 1,
                },
                where: {
                    ID_QinShi: ID_QinShi  //通过ID筛选(前:是后台接收。后:是页面获取值)
                }

            });
        }

后台:

   //树形类字段
    public class TreeVo
{
    public int? ParentID { get; set; }
    public int? SonID { get; set; }
    public string NodeName { get; set; }
    public int? SupplierParentID { get; set; }
    public int? SupplierSonID { get; set; }
}
  /// <summary>
        ///宿舍楼栋树形图
        /// </summary>
        /// <returns></returns>
        public JsonResult Get_TreeView()
        {
            List<Dictionary<string, object>> jsonlist = new List<Dictionary<string, object>>();
            List<TreeVo> treeList = new List<TreeVo>();
            var listSuShe = (from TbTrees in myModel.HB宿管楼栋
                             select new
                             {
                                 宿舍楼栋ID = TbTrees.宿舍楼栋ID,//父亲id
                                 宿舍楼栋MC = TbTrees.宿舍楼栋MC.Trim(),////儿子id  
                                 宿舍楼层ID = TbTrees.宿舍楼层ID//节点名
                             }).ToList();
            for (int i = 0; i < listSuShe.Count; i++)
            {
                TreeVo tree = new TreeVo();
                tree.ParentID = listSuShe[i].宿舍楼栋ID;//父亲id  
                tree.SonID = listSuShe[i].宿舍楼层ID;//儿子id
                if (listSuShe[i].宿舍楼层ID == 0)
                {
                    int J = int.Parse(tree.ParentID.ToString());
                    int I = int.Parse(tree.SonID.ToString());
                    int Count = (from tbJurisdictionGroupUser in myModel.HB宿管楼栋
                                 where tbJurisdictionGroupUser.宿舍楼层ID == J
                                 select tbJurisdictionGroupUser).Count();

                    int Count2 = (from tbSuSe in myModel.HB宿管楼栋宿舍
                                  where tbSuSe.宿舍楼栋ID == J
                                  select tbSuSe).Count();

     int Count3 = (from tbSuSe in myModel.HB宿管楼栋宿舍
              join tbChuagwei in myModel.HB宿管宿舍床位 on tbSuSe.宿舍ID equals tbChuagwei.宿舍ID
              join tbStu in myModel.G机构学生 on tbChuagwei.分配机构学生ID equals tbStu.机构学生ID
                                  where tbSuSe.宿舍楼栋ID == J
                                  select tbSuSe).Count();
                    tree.NodeName = listSuShe[i].宿舍楼栋MC.ToString().Trim() + "(" + Count +"层"+"-"+ Count2 + "间"+"-"+"已入住"+ Count3 + "人"+")";//拼接节点名
                }
                else
                {
                    tree.NodeName = listSuShe[i].宿舍楼栋MC.ToString().Trim();//节点名
                }
                treeList.Add(tree);
            }
            foreach (var model in treeList)
            {
                Dictionary<string, object> jsonobj = new Dictionary<string, object>();
                jsonobj.Add("id", model.ParentID); //父亲id
                jsonobj.Add("pId", model.SonID);//儿子id
                jsonobj.Add("name", model.NodeName);//节点名称
                                                    //jsonobj.Add("icon", "");
                jsonlist.Add(jsonobj);
            }
            return Json(jsonlist, JsonRequestBehavior.AllowGet);
        }
		
		
		
		
		
		
        ///// <summary>
        ///// 宿舍号表格查询
        ///// </summary>
        ///// <returns></returns>
        public ActionResult Select_SuSheH(LayuiTablePage layuiTablePage,string ID_QinShi)
        {
            // string[] ss= "".Split(',');//截取字符串
            //  var o='d3';
            string[] strs = ID_QinShi.Split(',');//截取一下前端传过来的两个ID值
            ///集合里面的值不能重复
            HashSet<int> vs = new HashSet<int>();//声明集合
            foreach (var item in strs)//遍历前端传来的ID值。
            {
                try
                {
                     //Dictionary<int,string>
                    int i = Convert.ToInt32(item);//接收的ID为String,必须要转换一下。
                    //Add 重复返回fasle,成功true
                    vs.Add(i);
                   // vs.Contains(i);判断是否为空/有值
                }
                catch (FormatException)//FormatException强制转换报的错
                {
                }
            }
            // 1 ,2  3
 List<SuSheBMVo> listSuSe = (from tb宿舍 in myModel.HB宿管楼栋宿舍
      join tb房型 in myModel.HB宿管床位类型与价格 on tb宿舍.房型床位类别ID equals tb房型.房型床位类别ID
                      //orderby tb宿舍.宿舍ID descending
					  select new SuSheBMVo
					  {
					  宿舍ID = tb宿舍.宿舍ID,
					  房型床位类别ID = tb宿舍.房型床位类别ID,
					  宿舍编码 = tb宿舍.宿舍编码,
					  性别= tb宿舍.性别,
					  房型床位类别MC = tb房型.房型床位类别MC,
					  床位数=tb宿舍.床位数,
					  入住人数=tb宿舍.入住人数,
					  宿舍楼层ID=tb宿舍.宿舍楼层ID
					  }).ToList();
            //将前端传过来的值,带着对应ID的数据返回前端
            listSuSe = listSuSe.Where((m) =>
            {
               return vs.Contains(m.宿舍楼层ID==null?0:Convert.ToInt32(m.宿舍楼层ID));
                // ture  返回该条数据
                //false 不返回数据
                //return true;
            }).ToList();

            //计算总条数
            int totalRow = listSuSe.Count();
            //分页数据
            List<SuSheBMVo> dbSuse = listSuSe
                              .Skip(layuiTablePage.GetStartIndex())
                               .Take(layuiTablePage.limit)
                               .ToList();
            //实例化 
            LayuiTableData<SuSheBMVo> layuiTableData = new LayuiTableData<SuSheBMVo>();
            layuiTableData.count = totalRow;
            layuiTableData.data = dbSuse;

            return Json(layuiTableData, JsonRequestBehavior.AllowGet);
        }

猜你喜欢

转载自blog.csdn.net/Q_MingTao/article/details/105939996