.NET 树形菜单的实现

.NET 树形菜单的实现
先上最终图
在这里插入图片描述

分为 h5的代码 js的代码 和后台代码
h5的代码内容 要把 树形菜单“画”出来

<div class="ibox-content">
                            <div class="row" id="listmain1">
                                <div class="form-group col-sm-12">
                                    <label class="col-sm-3 control-label">区域菜单树</label>
                                    <span class="col-sm-6 control-label" style="float: left;">
                                        <asp:Label ID="lblName" runat="server" ForeColor="Red"></asp:Label>
                                        <asp:Label runat="server">区域内容</asp:Label>
                                    </span>
                                </div>
                                <div class="form-group col-sm-12 left">
                                    <div class="col-sm-6" style="text-align: left; padding-left: 15%;">
                                        <ul id="treeDemo" class="ztree" style="overflow-y: auto; overflow-x: hidden;">
                                        </ul>
                                    </div>
                                    <div class="col-sm-6" style="text-align: left; padding-left: 10%; vertical-align: top;">
                                        <div style='padding: 10px;'>
                                            <a href='javascript:;' onclick="Add();"><i class="fa fa-plus"></i>&nbsp;新增</a>
                                            <a href='javascript:;' onclick="Edit();"><i class="fa fa-edit"></i>&nbsp;修改</a>
                                            <a href='javascript:;' onclick="javascript:DataRemove();"><i class="fa fa-trash"></i>&nbsp;删除</a>
                                            <a href='javascript:;' onclick="javascript:DataCut();"><i class="fa fa-cut"></i>&nbsp;剪切</a>
                                        </div>
                                        <div id="Content" class="table-responsive" ></div>
                                    </div>
                                </div>
                            </div>

                            <asp:HiddenField ID="hf1" runat="server" ClientIDMode="Static" />
                            <asp:HiddenField ID="h`f`Flag" runat="server" ClientIDMode="Static" />
                        </div>

然后就是js事件
需要引用两个js文件,请自行下载

<script type="text/javascript" src="../Scripts/Tree/js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="../Scripts/Tree/js/jquery.ztree.core-3.5.js"></script>

然后就是对一些事件的实现的js代码

<script type="text/javascript">
    var zNodes = [
        { id: 1, pId: 0, name: "父节点1", open: true },
        { id: 11, pId: 1, name: "子节点1" },
        { id: 12, pId: 1, name: "子节点2" },
        { id: 13, pId: 1, name: "子节点3" },
    ];
    //定义树控件设置
    var setting = {
        callback: {
            onClick: onClick
        },
        data: {
            simpleData: {
                enable: true
            }
        },
        view: {
            selectedMulti: false
        }
    };

    $(document).ready(function () {
        BindTree();
        setWindowHight();
    });
    function BindTree() {
        $.ajax({
            type: "GET",
            dataType: "json",
            url: "Area_List.aspx?Type=tree_Demo",
            success: function (date) {
                $.fn.zTree.init($("#treeDemo"), setting, eval(date.value));
            }
        })
    }
    //设置相关窗体高度
    function setWindowHight() {
        var height = $(window).height();
        var div = $("#listmain1");
        var tree = $("#treedemo");
        div.height(height - 60);
        tree.height(height - 140);
    }

    //点击事件
    function onClick(event, treeId, treeNode, clickFlag) {
        $.ajax({
            type: "GET",
            url: "Area_List.aspx",
            dataType: "html",
            contentType: 'application/html;charset=utf-8',
            data: "arid=" + treeNode.id + "&Type=Read" + "&time=" + new Date(),
            beforeSend: function (XMLHttpRequest) {
                $("#Content").html("<img src=../Images/jdt2.gif />");
            },
            success: function (retdata) {
                $("#Content").html(retdata);
            },
            error: function () {
                $("#Content").html("error");
            }
        });
    }

    //剪切
    function DataCut() {
        var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
        var node = treeObj.getSelectedNodes()[0];
        if (node != null) {
            if (confirm("确认要剪切吗?")) {
                layer.open({
                    type: 2,
                    title: '请选择要粘贴的结点',
                    shadeClose: true,
                    shade: 0.8,
                    maxmin: true,
                    area: ['600px', '400px'],
                    content: "SelectArea.aspx?arID=" + node.id + "&time=" + Date(),
                    end: function (index) {
                        if ($('#hf1').val() == "ok") {
                            alert("粘贴成功!");
                            window.location.reload(true);
                        }
                        else {
                            $("#Content").html("error");
                        }
                    },
                });
            }
        }
        else {
            alert('请先选择一个结点!');
        }
    }

    function Add() {
        var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
        var node = treeObj.getSelectedNodes()[0];
        if (node != null) {
            window.location.href = "Area_Add.aspx?from=treePage&arid=" + node.id + "&Areaname=" + node.name + "&ParentAreaID=" + node.region + "&time=" + new Date();
        }
        else {
            window.location.href = "Area_Add.aspx?from=treePage&arid=0" + "&time=" + new Date();
        }
        return false;
    }
    function Edit() {
        var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
        var node = treeObj.getSelectedNodes()[0];
        if (node != null) {
            window.location.href = "Area_Edit.aspx?from=treePage&id=" + node.id + "&ParentAreaID=" + node.region + "&time=" + new Date() + "&SX=" + node.abbreviation;
        }
        else {
            alert('请先选择一个结点!');
        }
        return false;
    }

    //删除
    function DataRemove() {
        var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
        var node = treeObj.getSelectedNodes()[0];
        if (node != null) {
            if (confirm("确认要删除?")) {
                $.ajax({
                    type: "GET",
                    url: "Area_List.aspx",
                    dataType: "html",
                    data: "arid=" + node.id + "&Type=Remove" + "&time=" + new Date(),
                    beforeSend: function (XMLHttpRequest) {
                    },
                    success: function (retdata) {
                        if (retdata.indexOf("OK") > -1) {
                            treeObj.removeNode(node);
                            $("#Content").html("");
                            alert('删除成功!');
                        }
                        else
                            alert(retdata);
                    },
                    error: function () {
                        alert('error!');
                    }
                });
            }
        }
        else {
            alert('请先选择一个结点!');
        }
    }
</script>

接下来就是 后台代码的实现

  protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                switch (Request["Type"])
                {
                    case "tree_Demo":
                        var result = DtToJson(null);
                        Response.Write(result);
                        Response.End();
                        break;
                    case "Read":  //查看结点详情
                        Read();
                        break;
                    case "Remove":  //删除结点
                        Response.Write(DataRemove(Request["arid"]));
                        break;
                    case "Cut":  //剪切结点
                        ChangeFatherNode();
                        break;
                    default:
                        //string s = DtToJson(null);
                        //this.ClientScript.RegisterStartupScript(this.GetType(), "DZL", "<script>zNodes=" + s + "</script>");
                        break;
                }
            }
        }

   
        protected string DtToJson(string Type)
        {
            string result = string.Empty;
            string ParentID = string.Empty;

            switch (Type)
            {
                case null://首次传进来是空的
                    {
                        result += CreateParent();
                        break;
                    }
            }

            if (result.Length > 0)
                result = "[\r\n" + result.Substring(1) + "\r\n]";
            JavaScriptSerializer json = new JavaScriptSerializer();
            return json.Serialize(new { value = result });
        }

        protected class AreaList
        {
            public int id { get; set; }
            public string name { get; set; }
            public string abbreviation { get; set; }
            public string pinyin_Abbreviation { get; set; }
            public int area_Type { get; set; }
            public string parent_Area { get; set; }
            public bool is_Provincial_Capital { get; set; }
            public int Count { get; set; }
        }


        /// <summary>
        /// 创建顶级节点
        /// </summary>
        /// <returns></returns>
        protected string CreateParent()
        {
            using (new DataContextScope())
            {
                string parentNode = string.Empty;
                string IsParent = string.Empty;
                AreaManageBLL areabll = new AreaManageBLL();
                var areas = areabll.getAllArea().Where(d => d.parent_Area == "-1");
                foreach (var ar in areas)
                {
                    IsParent = "false";
                    var menu = from q in areabll.getAllArea()
                               where q.parent_Area == ar.id.ToString()
                               select q;
                    if (menu.Count() > 0)
                    {
                        IsParent = "true";
                    }
                    parentNode += ",\r\n{id:'" + ar.id.ToString() + "',pId:'0',name:'" + ar.name
                        + "',region:'" + ar.parent_Area + "',open:false,isParent:" + IsParent + "}";

                    var groupList = from q in areabll.List()
                                    join child in areabll.List()
                                    on q.id.ToString() equals child.parent_Area
                                    group q by q.id into g                                                                                                 
                                    select new
                                    {
                                        g.Key,
                                        Count = g.Count()
                                    };

                    var AreaList = from q in areabll.List()
                                   join g in groupList on q.id equals g.Key
                                   into tempList
                                   from gList in tempList.DefaultIfEmpty()
                                   select new AreaList
                                  {
                                      id = q.id,
                                      name = q.name,
                                      abbreviation = q.abbreviation,
                                      pinyin_Abbreviation = q.pinyin_Abbreviation,
                                      area_Type = q.area_Type,
                                      parent_Area = q.parent_Area,
                                      is_Provincial_Capital = q.is_Provincial_Capital,
                                      Count = gList == null ? 0 : gList.Count,
                                  };

                    parentNode += CreateChild(AreaList, ar.id.ToString());
                }

                return parentNode;
            }
        }
        /// <summary>
        /// 创建子节点
        /// </summary>
        /// <param name="AreaManageList">数据筛选集合</param>
        /// <param name="Parentorg_id">父节点ID</param>
        /// <param name="parentNode">JSON拼接的节点信息</param>
        protected string CreateChild(IQueryable<AreaList> AreaList, string Parentorg_id)
        {
            string IsParent = string.Empty;
            string parentNode = string.Empty;
            var ChildList = from q in AreaList
                            where q.parent_Area == Parentorg_id
                            orderby q.name
                            select q;

            var theOrg_id = string.IsNullOrEmpty(Request["arid"]) ? "" : Request["arid"]; //传过来的结点ID

            foreach (var child in ChildList)
            {
                if (child.id.ToString() != theOrg_id)  //为了不显示这个菜单
                {

                    IsParent = "false";
                    if (child.Count > 0)
                        IsParent = "true";

                    parentNode += ",\r\n{id:'" + child.id.ToString() + "',pId:'" + Parentorg_id + "',name:'"
                               + child.name + "',region:'" + child.parent_Area + "',isParent:" + IsParent + "}";

                    parentNode += CreateChild(AreaList, child.id.ToString());
                }
            }
            return parentNode;
        }

        public void Read()
        {
            string errinfo = string.Empty;
            string tableHtml = string.Empty;
            if (string.IsNullOrEmpty(Request["arid"]))
            {
                errinfo = "没有传递结ID!";
            }
            else
            {
                T_Area ar = new T_Area();
                AreaManageBLL areaBll = new AreaManageBLL();
                var area = areaBll.getAreaById(Request["arid"]);
                if (area == null)
                {
                    errinfo = "该组织信息不存在!";
                }
                else
                {
                    var ParentAreaInfo = areaBll.getAreaById(area.parent_Area);
                    var name = "";
                    if (ParentAreaInfo != null)
                    {
                        name = ParentAreaInfo.name;
                    }
                    tableHtml = "<table class=\"table table-bordered table-striped\" style=\"\">";
                    tableHtml += "<tr><td>区域编码</td><td>" + area.area_Code + " </td></tr><tr><td>区域名称</td><td>" + area.name + " </td></tr><tr><td>区域缩写</td><td>" + area.pinyin_Abbreviation + " </td></tr>";
                    tableHtml += "<tr><td>区域拼音缩写</td><td>" + area.abbreviation + "</td></tr><tr><td>区域类型</td><td>" + DictionaryBll.GetObjectText("areaType", area.area_Type) + " </td></tr><tr><td>所属上级区域名称</td><td>" + name + " </td></tr>";
                    tableHtml += "<tr><td>是否省会</td><td>" + (area.is_Provincial_Capital == false ? "否" : "是") + " </td></tr>";
                    tableHtml += "</table>";
                }
            }
            Response.Write(errinfo == "" ? tableHtml : errinfo);
            Response.End();
        }

        /// <summary>
        /// 删除
        /// </summary>
        protected string DataRemove(string ID)
        {
            AreaManageBLL areaBll = new AreaManageBLL();
            string str = "";
            var childList = areaBll.List().Where(p => p.parent_Area == ID);
            if (childList.Count() > 0)
            {
                str = "该组织节点下存在子节点,请确保该节点下子节点为空,再删除该节点!";
            }
            else
            {
                var area = areaBll.getAreaById(ID);
                area.status = 3;
                areaBll.SaveArea(area);
                str = "OK";
            }
            return str;
        }
        /// <summary>
        /// 剪切
        /// </summary>
        protected void ChangeFatherNode()
        {
            string Status = string.Empty, Error = string.Empty;

            if (!string.IsNullOrEmpty(Request["theOrgID"]) && !string.IsNullOrEmpty(Request["aimOrgID"]))
            {
                int ID = int.Parse(Request["theOrgID"]);
                string NewParentorg_id = Request["aimOrgID"];

                AreaManageBLL areabll = new AreaManageBLL();
                var area = areabll.getAreaById(Request["theOrgID"]);
                area.parent_Area = NewParentorg_id;   //设置为新值
                //Area_Edit ePage = new Area_Edit();
                //area.area_Code = ePage.AddTraverseCode(area.parent_Area);

                try
                {
                    areabll.SaveArea(area);
                    Status = "Success";
                }
                catch (Exception ex)
                {
                    Status = "Fail";
                    Error = ex.Message;
                }
            }
            Response.Write("{\"Status\":" + Status + ",\"Error\":" + Error + "}");
        }

还有一个新增编辑的方法 不在这里 页面需要单独画 到这其实就能实现基本的增删改查 还有剪切功能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值