.Net Mvc中使用Jquery EasyUI控件讲解(四)树形表格treegrid使用讲解
深山老妖浏览:8132019-03-20 07:31:20本文累计收益:0我也要赚钱

在应用开发中树形表格treegrid是比较常用的控件用于展示数据结构数据,treegrid与datagrid控件使用方法基本相同,后台加载数据提供的json格式稍微有点区别,Json格式为:

{"total":9,"rows":[
    {"id":1,"region":"Wyoming"},
    {"id":11,"region":"Albin","f1":2000,"f2":1800,"f3":1903,"f4":2183,"f5":2133,"f6":1923,"f7":2018,"f8":1838,"_parentId":1},
    {"id":12,"region":"Canon","f1":2000,"f2":1800,"f3":1903,"f4":2183,"f5":2133,"f6":1923,"f7":2018,"f8":1838,"_parentId":1},
    {"id":13,"region":"Egbert","f1":2000,"f2":1800,"f3":1903,"f4":2183,"f5":2133,"f6":1923,"f7":2018,"f8":1838,"_parentId":1},
    {"id":2,"region":"Washington"},
    {"id":21,"region":"Bellingham","f1":2000,"f2":1800,"f3":1903,"f4":2183,"f5":2133,"f6":1923,"f7":2018,"f8":1838,"_parentId":2},
    {"id":22,"region":"Chehalis","f1":2000,"f2":1800,"f3":1903,"f4":2183,"f5":2133,"f6":1923,"f7":2018,"f8":1838,"_parentId":2},
    {"id":23,"region":"Ellensburg","f1":2000,"f2":1800,"f3":1903,"f4":2183,"f5":2133,"f6":1923,"f7":2018,"f8":1838,"_parentId":2},
    {"id":24,"region":"Monroe","f1":2000,"f2":1800,"f3":1903,"f4":2183,"f5":2133,"f6":1923,"f7":2018,"f8":1838,"_parentId":2}
],"footer":[
    {"region":"Total","f1":14000,"f2":12600,"f3":13321,"f4":15281,"f5":14931,"f6":13461,"f7":14126,"f8":12866}
]}
_parentId是必须提供的关键列,名字必须是这个名字,并且必须是小写,用于区别树形数据结构层次。
一、前端使用

前端主要包括两部分,用于展示数据的html表格,以及为其加载数据的Js代码。

<table id="gridList" toolbar="#tb" fit="true"></table>

以上是html部分,主要就是html table表格,id属性是必须的,用于关联js,js代码如下:

//表格初始化
        $(function () {
             $('#gridList').treegrid({
                title: false,
                nowrap: false,
                iconCls: 'icon-list-bullets',
                dataType: "json",
                fitColumns: true,
                rownumbers: true,
                pagination: true,
                pageSize: 100,
                pageNumber: 1,
                pageList: [20, 40, 100],
                url: '/Article/ColumnList',
                idField: 'ID',
                treeField: 'NAME',
                columns: [[
                    { field: 'ck', checkbox: true },
                    { field: 'ID', title: 'ID', width: 120, align: 'center', hidden: true, sortable: true },
                    { field: 'NAME', title: '栏目名称', width: 240, align: 'left', sortable: true },
                    { field: 'ORDERNO', title: '显示顺序', width: 240, align: 'left', sortable: true }
                ]],
                striped: true,
                sortOrder: "ASC",
                sortName: "ORDERNO",
                singleSelect: true,
                selectOnCheck: true,
                checkOnSelect: true,
            });
            //设置分页控件
            $('#gridList').treegrid('getPager').pagination({
                beforePageText: '第',//页数文本框前显示的汉字
                afterPageText: '页 共{pages}页',
                displayMsg: '{from}-{to}条 共{total}条',
            });
        });
url: '/Article/ColumnList',制定数据获取地址,至此前端代码基本完成。
二、后台代码
        public JsonResult ColumnList()
        {
            //获取flexigrid参数
            int pageSize = int.Parse(ClassesLib.GetString("rows").ToString());
            int pageIndex = int.Parse(ClassesLib.GetString("page").ToString());
            string sortName = ClassesLib.GetString("sort").ToString();
            string sortOrder = ClassesLib.GetString("order").ToString();
            //获取外部查询条件
            string define = "";
            string logic = " AND ";
            string tmp1 = HttpContext.Request.Form["NAME"] == null ? "" : HttpContext.Request.Form["NAME"];
            define = (define == "" ? (tmp1 == "" ? "" : (" NAME like '%" + tmp1 + "%'")) : (tmp1 == "" ? define : (define + " " + logic + " NAME like '%" + tmp1 + "%'")));
            string returnTotal = "";
            var list = ColumnBaseService.GetTreeModels(pageSize, pageIndex, define, sortName + " " + sortOrder, ref returnTotal).ToList();
            //树表处理
            List<Object> treeList = new List<object>();
            foreach (ColumnTreeGridList a in list)
            {

                if (a.PARENTID.Equals("ROOT"))
                    treeList.Add(new { ID = a.ID, NAME = a.NAME, ORDERNO = a.ORDERNO,  IFDISABLE = a.IFCLOSE });
                else
                    treeList.Add(new { ID = a.ID, NAME = a.NAME, ORDERNO = a.ORDERNO, IFDISABLE = a.IFCLOSE, _parentId = a.PARENTID });
            }
            var json = new
            {
                total = returnTotal,
                rows = treeList.ToArray()
            };
            return Json(json, JsonRequestBehavior.AllowGet);
        }

以上代码具体说明如下:

//获取flexigrid参数
int pageSize = int.Parse(ClassesLib.GetString("rows").ToString());
int pageIndex = int.Parse(ClassesLib.GetString("page").ToString());
string sortName = ClassesLib.GetString("sort").ToString();
string sortOrder = ClassesLib.GetString("order").ToString();

以上代码用于获取前端treegrid传过来的分页及排序相关参数,代码是必须的。

//获取外部查询条件
            string define = "";
            string logic = " AND ";
            string tmp1 = HttpContext.Request.Form["NAME"] == null ? "" : HttpContext.Request.Form["NAME"];
            define = (define == "" ? (tmp1 == "" ? "" : (" NAME like '%" + tmp1 + "%'")) : (tmp1 == "" ? define : (define + " " + logic + " NAME like '%" + tmp1 + "%'")));

这里用于根据前台传过来的查询参数,进行构造查询语句代码,不是必须的。

var list = ColumnBaseService.GetTreeModels(pageSize, pageIndex, define, sortName + " " + sortOrder, ref returnTotal).ToList();

这句是分页查询数据库获取树形数据部分,直接返回list,具体代码如下:

        public List<ColumnTreeGridList> GetTreeModels(int pageSize, int pageIndex, string whereStr, string orderByStr, ref string returnTotal)
        {
            if (whereStr == "") whereStr = "1=1";
            string sqlStrTmp = "SELECT * FROM M_COLUMN_BASE WHERE " + whereStr;
            string sqlStr = "SELECT TOP " + pageSize + " * FROM (SELECT ROW_NUMBER() OVER (ORDER BY " + orderByStr + ") AS RowNumber,* FROM (" + sqlStrTmp + ") as b) A WHERE RowNumber > " + pageSize + "*(" + pageIndex + "-1) order by RowNumber";
            var list = dbContext.Database.SqlQuery<ColumnTreeGridList>(sqlStr).ToList();
            //取得总记录个数
            sqlStrTmp = "SELECT Count(ID) AS LISTCOUNT FROM M_COLUMN_BASE WHERE " + whereStr;
            returnTotal = dbContext.Database.SqlQuery<ListCountViewModel>(sqlStrTmp).ToList()[0].LISTCOUNT.ToString();//获取总页数
            return dbContext.Database.SqlQuery<ColumnTreeGridList>(sqlStr).ToList();
        }
//树表处理
            List<Object> treeList = new List<object>();
            foreach (ColumnTreeGridList a in list)
            {

                if (a.PARENTID.Equals("ROOT"))
                    treeList.Add(new { ID = a.ID, NAME = a.NAME, ORDERNO = a.ORDERNO,  IFDISABLE = a.IFCLOSE });
                else
                    treeList.Add(new { ID = a.ID, NAME = a.NAME, ORDERNO = a.ORDERNO, IFDISABLE = a.IFCLOSE, _parentId = a.PARENTID });
            }

以上代码应该可以跟查询语句合二为一,主要形成_parentId列使用,因为查询语句没有,这里新增的。

三、treegrid参数使用详解

属性

该属性扩展自数据网格(datagrid),下面是为树形网格(treegrid)添加的属性。

名称 类型 描述 默认值
idField string 定义标识树节点的键名字段。必需。 null
treeField string 定义树节点的字段。必需。 null
animate boolean 定义当节点展开或折叠时是否显示动画效果。 false
loader function(param,success,error) 定义如何从远程服务器加载数据。返回 false 则取消该动作。该函数有下列参数:
param:要传递到远程服务器的参数对象。
success(data):当检索数据成功时调用的回调函数。
error():当检索数据失败时调用的回调函数。
json loader
loadFilter function(data,parentId) 返回要显示的过滤数据。  

事件

该事件扩展自数据网格(datagrid),下面是为树形网格(treegrid)添加的事件。

名称 参数 描述
onClickRow row 当用户点击一个节点时触发。
onDblClickRow row 当用户双击一个节点时触发。
onClickCell field,row 当用户点击一个单元格时触发。
onDblClickCell field,row 当用户双击一个单元格时触发。
onBeforeLoad row, param 当加载数据的请求发出前触发,返回 false 则取消加载动作。
onLoadSuccess row, data 当数据加载成功时触发。
onLoadError arguments 当数据加载失败时触发,arguments 参数和 jQuery.ajax 的 'error' 方法一样。
onBeforeExpand row 节点展开前触发,返回 false 则取消展开动作。
onExpand row 当节点展开时触发。
onBeforeCollapse row 节点折叠前触发,返回 false 则取消折叠动作。
onCollapse row 当节点折叠时触发。
onContextMenu e, row 当右键点击节点时触发。
onBeforeEdit row 当用户开始编辑节点时触发。
onAfterEdit row,changes 当用户完成编辑时触发。
onCancelEdit row 当用户取消编辑节点时触发。

方法

很多方法需要一个名为 'id' 的参数,该参数表示树节点的值。

名称 参数 描述
options none 返回树形网格(treegrid)的选项(options)。
resize options 设置树形网格(treegrid)的尺寸, options 参数包含两个属性:
width:树形网格(treegrid)的新宽度。
height:树形网格(treegrid)的新高度。
fixRowHeight id 固定指定行的高度。
loadData data 加载树形网格(treegrid)的数据。
load param 加载并显示第一页。该方法自版本 1.3.4 起可用。
代码实例:

 
  1. // load and send some request parameters
  2. $('#tg').treegrid('load', {
  3. q: 'abc',
  4. name: 'name1'
  5. });
reload id 重新加载树形网格(treegrid)的数据。如果传递了 'id' 参数,则重新加载树的指定行,否则重新加载树的所有行。
代码实例:

 
  1. $('#tt').treegrid('reload', 2); // reload the row which value is equals to 2
  2. $('#tt').treegrid('reload'); // reload the all rows
  3. $('#tt').treegrid('reload', {id:2, q:'abc'}); // reload the specified row with 'q' parameter passing to server
reloadFooter footer 重新加载底部数据。
getData none 获取加载的数据。
getFooterRows none 获取底部数据。
getRoot none 获取根节点,返回节点对象。
getRoots none 获取根节点,返回节点数组。
getParent id 获取父节点。
getChildren id 获取子节点。
getSelected none 获取选中的节点并返回它,如果没有选中节点则返回 null。
getSelections none 获取所有选中的节点。
getLevel id 获取指定节点的层级。
find id 找到指定节点并返回该节点数据。
select id 选择节点。
unselect id 取消选择节点。
selectAll none 选择所有节点。
unselectAll none 取消选择所有节点。
collapse id 折叠节点。
expand id 展开节点。
collapseAll id 折叠所有的节点。
expandAll id 展开所有的节点。
expandTo id 从根部展开一个指定的节点。
toggle id 切换节点的展开/折叠状态。
append param 追加一些子节点到一个父节点,'param' 参数包括下列属性:
parent:父节点的 id,如果没有分配,则追加为根节点。
data:数组,节点的数据。

代码实例:

 
  1. // append some nodes to the selected row
  2. var node = $('#tt').treegrid('getSelected');
  3. $('#tt').treegrid('append',{
  4. parent: node.id, // the node has a 'id' value that defined through 'idField' property
  5. data: [{
  6. id: '073',
  7. name: 'name73'
  8. }]
  9. });
insert param 在指定节点的前边或后边插入一个节点,'param' 参数包括下列属性:
before:前边插入的节点的 id 值。
after:后边插入的节点的 id 值。
data:新的节点数据。

代码实例:

 
  1. // insert a new node before the selected node
  2. var node = $('#tt').treegrid('getSelected');
  3. if (node){
  4. $('#tt').treegrid('insert', {
  5. before: node.id,
  6. data: {
  7. id: 38,
  8. name: 'name38'
  9. }
  10. });
  11. }
该方法自版本 1.3.1 起可用。
remove id 移除节点和它的子节点。
pop id 弹出节点并在移除该节点后返回包含其子节点的节点数据。该方法自版本 1.3.1 起可用。
refresh id 刷新指定的节点。
update param 更新指定的节点。'param' 参数包括下列属性:
id:表示要被更新的节点的 id。
row:新的行数据。

代码实例:

 
  1. $('#tt').treegrid('update',{
  2. id: 2,
  3. row: {
  4. name: 'new name',
  5. iconCls: 'icon-save'
  6. }
  7. });
该方法自版本 1.3.1 起可用。
beginEdit id 开始编辑节点。
endEdit id 结束编辑节点。
cancelEdit id 取消编辑节点。
getEditors id 获取指定行的编辑器。每个编辑器有下列属性:
actions:编辑器可以做的动作。
target:目标编辑器的 jQuery 对象。
field:字段名。
type:编辑器的类型。
getEditor param 获取指定的编辑器,param 参数包含两个属性:
id:行节点的 id。
field:字段名。
评论列表
发表评论
+ 关注