[Asp.NET MVC+EasyUI] TreeGrid全部加载及懒加载示例

本篇文主要对EasyUI中TreeGrid组件的使用进行演示。对于正在学此组件的童鞋,不防花个几分钟看一下。本文主要演示:TreeGrid的简单应用、懒加载方法、控件数据格式。

TreeGrid组件是由DataGrid集成而来,可以使行与行之间存在父子关系,是一种树形网格组件。

1. 创建简单示例

  通过post方式调用后端数据,将数据展示到前端,具体代码如下:

  1.1 前端代码

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>TreeGridDemo</title>
    <link href="/Scripts/easyui/themes/icon.css" rel="stylesheet" />
    <link href="/Scripts/easyui/themes/metro-blue/easyui.css" rel="stylesheet" />
    <script src="/Scripts/jquery-1.9.1.min.js"></script>
    <script src="/Scripts/easyui/jquery.easyui.min.js"></script>
</head>
<body>
    <table id="TreeDemo" title="Folder Browser" class="easyui-treegrid" style="width: 400px; height: 300px"
        url="/TreeGridShow/ShowTreeGridJson"
        rownumbers="true"
        idfield="id"
        treefield="name">
        <thead>
            <tr>
                <th field="name" width="160">Name</th>
                <th field="remark" width="160" align="right">Remark</th>
            </tr>
        </thead>
    </table>
</body>
</html>

  1.2 后端代码

     [HttpPost]
        public JsonResult ShowTreeGridJson()
        {
            List<ColorPanal> colorList = new List<ColorPanal>() {
                new ColorPanal() { id = "1", name = "所有颜色", remark="all", _parentId = ""},
                new ColorPanal() { id = "2", name = "冷色", remark="二级", _parentId = "1"},
                new ColorPanal() { id = "3", name = "白色", remark="二级", _parentId = "2",state="closed"},//添加state状态为closed可以标识此节点下有子集
                new ColorPanal() { id ="4", name = "蓝色", remark="二级", _parentId = "2" },
                new ColorPanal() { id = "5", name = "暖色", remark="二级", _parentId = "1" },
                new ColorPanal() { id = "6", name = "混和", remark="二级", _parentId ="1" }
            };

            return Json(new DataGridModel
            {
                total = colorList.Count(),//总行数
                rows = colorList.ToList().ConvertAll(p => new
                {
                    p.id,
                    p.name,
                    p.remark,
                    p.state,
                    p._parentId
                })
            });
        }  

   public class ColorPanal
    {
        public string id, name, remark, _parentId, state;
    }

    public class DataGridModel
    {
        public int total { get; set; }
        public IEnumerable<object> rows { get; set; }
    }

  1.3 效果展示

2. 懒加载示例

  2.1实现代码

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>TreeGridDemo</title>
    <link href="/Scripts/easyui/themes/icon.css" rel="stylesheet" />
    <link href="/Scripts/easyui/themes/metro-blue/easyui.css" rel="stylesheet" />
    <script src="/Scripts/jquery-1.9.1.min.js"></script>
    <script src="/Scripts/easyui/jquery.easyui.min.js"></script>
</head>
<body>
    <table id="TreeDemo" title="Folder Browser" class="easyui-treegrid" style="width: 400px; height: 300px"
        url="/TreeGridShow/ShowTreeGridJson"
        rownumbers="true"
        idfield="id"
        treefield="name">
        <thead>
            <tr>
                <th field="name" width="160">Name</th>
                <th field="remark" width="160" align="right">Remark</th>
            </tr>
        </thead>
    </table>
    <script>
        $("#TreeDemo").treegrid({       width: function () { return document.body.clientWidth * 0.9 },//宽度调整
            //onBeforeExpand  点击展开结点后出发的事件,返回true继续执行,返回false事件关闭
            onBeforeExpand: function (row) {
                //已经展开过,无需重新加载(若去掉,前端则会不停刷新展开节点)
                var childrens = $("#TreeDemo").treegrid("getChildren", row["id"]);
                if (childrens != null && childrens.length > 0) {
                    return false;
                }
          //此处添加ajax异步,可调用后端
                $(‘#TreeDemo‘).treegrid(‘collapse‘, row["id"]).treegrid(‘append‘, {
                    parent: row["id"],
                    data: jsonstr
                }).treegrid(‘expand‘, row["id"]);
                return true;
            }
        });

        var jsonstr = [
                { "id": 10, "name": "浅白", remark: "三级", "_parentId": 3 },
                { "id": 20, "name": "粉白", remark: "三级", "_parentId": 3 }
        ];
    </script>
</body>
</html>

  2.2 后端代码见1.2

  2.3 效果图

3. 格式说明

  3.1 基础数据格式:

{
    "total": 6,//总行数
    "rows": [
        {
            "id": "1",
            "name": "所有",
            "remark": "备注",
            "_parentId": "0",//注意此名称唯一
            "state": "open"
        },
        {
            "id": "1",
            "name": "所有",
            "remark": "备注",
            "_parentId": "1",
            "state": "open"
        }
    ]
}

  3.2 异步节点加载格式

[
    {
        "id": 10,
        "name": "浅白",
        remark: "三级",
        "_parentId": 3
    },
    {
        "id": 20,
        "name": "粉白",
        remark: "三级",
        "_parentId": 3
    }
]

3. 结语

此演示示例没有做分页演示,可用于数据量小的数据展示;懒加载可用于多层级展示。

附源码地址:http://download.csdn.net/download/manbuba/10106241

时间: 2024-10-12 21:15:44

[Asp.NET MVC+EasyUI] TreeGrid全部加载及懒加载示例的相关文章

EasyUI treegrid 实现点击父节点加载子节点

今天在项目中遇到问题,要实现 EasyUI   treegrid 实现点击父节点加载子节点 第一反应是去百度一下,谷歌一下,发现网上的回答不是懒加载就是在onBeforeExpand调用append方法 我决定使用第二种方法,定义treegrid的onBeforeExpand方法,在里面调用appen方法. 然而当我兴冲冲的运行的时候,出问题了, Firefox出现too much recursion异常提示 在网上看了一下这个问题的出现原因,大家都说是,非法使用了js关键字,可是我看了几遍代码

ASP.NET MVC +EasyUI 权限设计(二)环境搭建

请注明转载地址:http://www.cnblogs.com/arhat 今天突然发现博客园出问题了,老魏使用了PC,手机,平板都访问博客园了,都是不能正常的访问,原因是不能加载CSS,也就是不能访问common.cnblogs.com这个域名,一直出现"Aborted",非常的郁闷. 页面就是这样子的,不知道为什么,难道是不是我的3个终端有问题吧,还是园子的服务器有问题呢?还是路由器的问题呢?到现在这个问题还没解决,郁闷死了!弄得心情非常的不爽. 好吧,不在说这个问题了,开始我们的正

asp.net mvc +easyui 实现权限管理(二)

一写完后,好久没有继续写了.最近公司又在重新开发权限系统了,但是由于我人微言轻,无法阻止他们设计一个太监版的权限系统.想想确实是官大一级压死人啊, 没办法我只好不参与了 让他们去折腾. 我就大概说一下公司目前在做的权限系统,各位看官给点评价. 设计总体要求: (注:项目名称为 统一权限管理系统) 1.做一个通用权限系统. 2.权限设计按照角色设置. 3.提供统一权限接口 以上就是整体要求,解释一下, 我们的通用是指的以后每开发一套新系统,只需要在统一权限管理系统中进行相应的配置就好了,无需再去开

ASP.NET MVC +EasyUI 权限设计(一)开篇

在前一段时间中,老魏的确非常的忙碌,Blog基本上没有更新了,非常的抱歉,那么在后面的时间中,老魏会尽量的抽时间来写的,可能时间上就不太富裕了.今天开始呢,老魏会和大家分享一下关于权限设计的有关文章,由于在园子中已经有很多人写过这方面的知识了,所以老魏在这里呢可不能班门弄斧了,只是把自己的理解和做法和大家分享一下,如果有什么不对的地方或者可以优化的地方,老魏非常希望能够得到各位的建议. 话说权限是在任何的项目或者产品中都必须要用的模块,而这部分呢基本上是作为基础数据来提供的,为了能够控制各个用户

对Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架的个人认识

对Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架的个人认识   初次接触Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架,查阅了相关资料,了解了框架如何使用,以及优缺点,下面的说法可能比较浅显,后续的可能在开发过程中能了解的更深刻一些.说的不对的地方请及时指正. 首先,拿到这个框架的时候,第一个想问的问题是为什么想用这块框架,有什么好处,通过查资料浅显的理解为:为了实现应用的松耦合,通过配置完成对数据业务逻辑的处理,节省开发时

ASP.NET MVC+EasyUI+Entity FrameWork 整合开发

本文详细讲解怎么用ASP.NET MVC+EasyUI+Entity FrameWork 来开发一个项目 对于ASP.NET MVC的Jscript库,主要引用 <script type="text/javascript" src="@Url.Content("~/Scripts/jquery-1.7.2.min.js")"></script> <script src="@Url.Content("

asp.net mvc easyui datagrid分页

提到 asp.net mvc 中的分页,很多是在用aspnetpager,和easyui datagrid结合的分页却不多,本文介绍的是利用easyui 中默认的分页控件,实现asp.net mvc分页. easyui datagrid分页要求数据采用的格式 :{total:2,row:[]}, 在asp.net mvc 中服务器端只要返回这符合这样格式的json数据就好. 页面前端: 服务器端: 附带asp.net 结合 easyui 增删改查的例子: asp.net mvc easyui d

ASP.NET MVC Filters 4种默认过滤器的使用【附示例】

http://www.cnblogs.com/oppoic/p/mvc_authorization_action_result_exception_filters.html ASP.NET MVC Filters 4种默认过滤器的使用[附示例] 过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响应内容,只响应特定内容给那些有特定权限的用户,过滤器理论上有以下功能: 判断登录与否或用户权限 决策输出缓存 防盗链 防蜘蛛 本地

网站优化--图片的预加载与懒加载(上)

1.延迟加载即懒加载,主要目的是作为服务器前端的优化,减少请求数或延迟请求数,在一些图片非常多的网站中非常有用,当图片位置进入到可视区的时候才会被加载,这样对于含有很多 图片的比较长的网页来说,可以加载的更快,并且还能节省服务器带宽 最常用的方式是:监控滚动条的高度,当滚动条高度和可视区高度之和小于图片位置距离页面的高度时会被加载 2.预加载:在查看前面张图片的时候加载后面的图片,在提升用户体验的同时会增加服务器的压力 常用方式:创建image对象,通过src属性加载url资源,当资源加载完成后