asp.net 树形控件 $.fn.zTree.init

在网页中通过jquery脚本来构筑树形控件将是一个不错的选择,比如有一个文本框,当鼠标点击的时候,像弹出一个下拉框一样弹出一个树形控件,
这似乎是一个不错的控制。下面主要讲讲这种树形控件的实现。
为了能使用这种控件,需要中网上下载这个控件的脚本,然后引用到页面中

<script src="/Scripts/jquery.ztree.core-3.5.js"></script>
    <script src="/Scripts/jquery.ztree.excheck-3.5.js"></script>

当然还有关于这个控件的样式表

<link href="~/Style/zTreeStyle/zTreeStyle.css" rel="stylesheet" />

这些都可以到网上下载。

首先新建一个网页,添加一个文本框,页面代码如下:

<asp:TextBox runat="server" ID="CitySel" ReadOnly="True" Style="width: 135px;" placeholder="选择地区" onclick="ShowAreaTree(); "></asp:TextBox>
        <asp:HiddenField runat="server" ID="HiddenAreaTreeSelID" />
        <div id="AreaTreeContent" class="menuContent" style="display: none; position: absolute; background-color: #e0ffff; margin-left:32.7%;margin-top: 45px; top:0px;left:0px;width:135px;">
             <ul id="AreaTree" class="ztree" style="margin-top: 0; width: 135px; height: 300px;"></ul>
         </div>

属性placeholder可以使得文本框中有一个默认的文本,但是在鼠标进入这个文本框后,这个默认文本会自动消失。如果不输入数据,待鼠标离开后,这
个默认文本又出现了。HiddenField是一个隐藏域,用来保存选项的code或ID。 ul就是树形控件的节点了。

界面设计好了,现在需要实现的功能是,在页面加载完成后,自动的为这个树形控件填充数据。这同样是通过脚本来完成。

<script type="text/javascript">
$(function () {
    $.ajax({
                url: "../../ChannelContent/SystemManage/UserManage_JSON.aspx?PostType=AreaTree",
                datatype: "json",
                context: document.body,
                success: function (data) {
                    $.fn.zTree.init($("#AreaTree"), Areasetting, eval("(" + data + ")"));
                }
            });
});
</script>

$(function (){})这个函数是在页面加载完成后会自动执行的一个脚本函数。$.ajax可以将业务逻辑转移到url指定的页面的后台代码中去执行,这个页面实际上就是一个空页面,上面也没有。
执行完成后返回的数据放到data中,然后通过$.fn.zTree.init来填充树形控件。Areasetting稍后介绍,这里补充一点关于$.ajax业务逻辑转移的方法。
在UserManage_JSON页面的load方法中,通过string postType = Request["PostType"];来接收传递过来的参数PostType,在load方法的代码如下:

IList<ContentTree> bwAreas = BwAreaManage.GetAreaTree();

                string BwAreaJson = JsonConvert.SerializeObject(bwAreas);//将对象转换为jason字符串

                Response.Write(BwAreaJson);//返回查询的结果
GetAreaTree函数:
public virtual IList<ContentTree> GetAreaTree()
        {
            IList<ContentTree> Result = new List<ContentTree>();

            ContentTree bwArea = new ContentTree();
            bwArea.id = "0";
            bwArea.name = ConfigurationManager.AppSettings["AreaTreeRoot"];
            bwArea.pId = "-1";
            bwArea.open = true;
            Result.Add(bwArea);

            IList<BWAreaEntity> BwAreaList = bwAreaDataAccess.GetAreas(2);//从数据库中获取数据

            foreach (BWAreaEntity Area in BwAreaList)
            {
                ContentTreeEntity newArea = new ContentTreeEntity();
                //下面的name和ID是必须要有的,用于显示数据
                newArea.id = Area.forgCityCode.ToString();
                newArea.name = Area.FCityName;
                newArea.pId = Area.ftopId.ToString();
                if (Area.ftopId == 0)
                {
                    newArea.open = true;
                }
                else
                {
                    newArea.open = false;
                }

                Result.Add(newArea);
            }

            return Result;
        }

上面的BwAreaJson 是一个jason字符串,内容如图:

在返回这个字符串后,程序又回到了脚本中了。

var Areasetting = {
            view: {
                dblClickExpand: false
            },
            data: {
                simpleData: {
                    enable: true
                }

            },
            callback: {
                onClick: onAreaTreeClick//当选择树中的节点时,调用的函数
            }
        };

关于Areasetting 的格式可以到网上去查,这里不做解释。

脚本函数onAreaTreeClick:

function onAreaTreeClick(e, treeId, treeNode) {
            var zTree = $.fn.zTree.getZTreeObj("AreaTree"),
            nodes = zTree.getSelectedNodes(),
            v = "";
            var SeleValue;
            nodes.sort(function compare(a, b) { return a.id - b.id; });
            for (var i = 0, l = nodes.length; i < l; i++) {
                v += nodes[i].name + ",";
                SeleValue = nodes[i].id;
            }
            if (v.length > 0) v = v.substring(0, v.length - 1);
            var cityObj = $("#<%=CitySel.ClientID%>");
            cityObj.attr("value", v);//这里是将选中项的值写到文本框中
            $("#<%=HiddenAreaTreeSelID.ClientID%>").val(SeleValue);
            var townCityCode = SeleValue.toString().substr(0, 6);//将选中项的值写到隐藏域

            HideAreaTree();
        }
        //显示地区选择树
        function ShowAreaTree() {
            //定义下拉树展示时位置
            $("#AreaTreeContent").slideDown("fast");//slideDown使用淡出效果来显示被选元素
            $("body").bind("mousedown", onBodyDown);//bind() 方法为被选元素添加一个或多个事件处理程序,并规定事件发生时运行的函数。鼠标按下时执行onBodyDown
        }
        function HideAreaTree() {
            $("#AreaTreeContent").fadeOut("fast");//fadeOut使用淡出效果来隐藏被选元素
            $("body").unbind("mousedown", onBodyDown);
        }
        function onBodyDown(event) {
            if (!(event.target.id == "AreaTreeContent" || $(event.target).parents("#AreaTreeContent").length > 0)) {
                HideAreaTree();
            }
        }

OK,到这里,整个树形控件就构筑完了,代码自己慢慢研究吧,看一下效果

时间: 2024-10-07 06:50:18

asp.net 树形控件 $.fn.zTree.init的相关文章

开发路程(13):树形控件

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <script src="http://code.jquery.com/jquery.min.js"></script> 6 <script> 7 function rootClicked(v) 8 { 9 var newItem=document.creat

Qt: 创建具有复选框的树形控件

在Qt中的树形控件称为QTreeWidget,而控件里的树形节点称为QTreeWidgetItem. 关于QTreeWidget控件和QTreeWidgetItem的更多详细知识点,可以查看Qt的官方帮助文档. QTreeWidget类: QTreeWidgetItem类: 实现的功能: 创建树形控件,当选中顶层树形节点时,子节点全部选中. 当选中部分子节点时,顶层树形节点处于灰色未全部选中状态.(部分选中状态) 当子节点全部选中,顶层节点变为选中状态. 具体步骤: 1.  新建Qt GUI应用

Web应用程序开发,基于Ajax技术的JavaScript树形控件

感谢http://www.cnblogs.com/dgrew/p/3181769.html#undefined 在Web应用程序开发领域,基于Ajax技术的JavaScript树形控件已经被广泛使用,它用来在Html页面上展现具有层次结构的数据项. 目前市场上常见的JavaScript框架及组件库中均包含自己的树形控件,例如jQuery.Dojo.YUI.Ext JS等,还有一些独立的树形控件,例如dhtmlxTree等,这些树形控件完美的解决了层次数据的展示问题. 展示离不开数据,树形控件主要

asp.net验证控件

asp.net验证控件的好处: 1,客户端服务器端都会同时校验. 2,简化校验逻辑. 1,RequiredFieldValidator:非空校验 InitialValue:默认值.当控件的值等于默认值时不能通过校验. Text:显示的错误信息. ControltoValidat:关联需要验证的控件. 2,RangeValidator:在给定的最大最小值之间. Type:需要验证的数据类型.MaximumValue:最大值.MinimumValue:最小值. 不会进行非空校验.如要进行非空校验需要

简陋的树形控件

<!DOCTYPE html> <html> <head> <script src="http://code.jquery.com/jquery.min.js"></script> <script> function rootClicked(v) { var newItem=document.createElement("div"); $(newItem).addClass("item

浅谈ASP.NET报表控件

浅谈ASP.NET报表控件 作者:管理员 来源:51CTO 浏览:360 发布时间:2010-6-19 0:26:07 OWC似乎使用者居多,但看见有网友在帖中抱怨OWC在使用时需要许可证书,于是将其排除,我可不想BOSS在看报表时弹出一个“没有许可证书”的窗口. 接着找到了ComponentOne的Web chart做出的各种效果图,效果极佳.我一下子被迷住了,决定就是它,于是马不停蹄的下了最新版100多M的安装文件,又花一上午找了个可以用的注册码,再找了篇教程,OK万事俱备,兴匆匆的开始写代

ASP.NET ValidationSummary 控件

ASP.NET ValidationSummary 控件 Validation 服务器控件 定义和用法 ValidationSummary 控件用于在网页.消息框或在这两者中内联显示所有验证错误的摘要. 在该控件中显示的错误消息是由每个验证控件的 ErrorMessage 属性规定的.如果未设置验证控件的 ErrorMessage 属性,就不会为那个验证控件显示错误消息. 属性 属性 描述 DisplayMode 如何显示摘要.合法值有: BulletList List SingleParagr

基于Vuex的树形控件

用vue也有一小段时间了,最近刚好写到一个树形控件,脑补了下怎么设计数据结构,结果vuex的双向绑定让我瞬间痴汉了 代码在这里http://jsfiddle.net/osyo/2cm2bLdf/ 思路也挺简单的,就是把当前元素所在的对象作为参数传入方法中直接修改 emmm,这里要注意一点,如下 state: { all: { name: '0', list: [ { name: '0-0', content: 'some text' } ] }, formData: { group: { nam

(转)浅谈ASP.NET报表控件

项目中有报表图形化的需求, 于是开始在网上找第三方chart控件.因时间紧迫,大至确定了几个候选:一.Office带的OWC控件:二.ComponentOne:三.Web Chart.本文将讲解ASP.NET报表控件. AD:2014WOT全球软件技术峰会北京站 课程视频发布 OWC似乎使用者居多,但看见有网友在帖中抱怨OWC在使用时需要许可证书,于是将其排除,我可不想BOSS在看报表时弹出一个“没有许可证书”的窗口. 接着找到了ComponentOne的Web chart做出的各种效果图,效果