.Net Mvc中使用Jquery EasyUI控件讲解(四)树形表格treegrid使用讲解
在应用开发中树形表格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 起可用。 代码实例:
|
| reload | id | 重新加载树形网格(treegrid)的数据。如果传递了 'id' 参数,则重新加载树的指定行,否则重新加载树的所有行。 代码实例:
|
| 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:数组,节点的数据。 代码实例:
|
| insert | param | 在指定节点的前边或后边插入一个节点,'param' 参数包括下列属性: before:前边插入的节点的 id 值。 after:后边插入的节点的 id 值。 data:新的节点数据。 代码实例:
|
| remove | id | 移除节点和它的子节点。 |
| pop | id | 弹出节点并在移除该节点后返回包含其子节点的节点数据。该方法自版本 1.3.1 起可用。 |
| refresh | id | 刷新指定的节点。 |
| update | param | 更新指定的节点。'param' 参数包括下列属性: id:表示要被更新的节点的 id。 row:新的行数据。 代码实例:
|
| beginEdit | id | 开始编辑节点。 |
| endEdit | id | 结束编辑节点。 |
| cancelEdit | id | 取消编辑节点。 |
| getEditors | id | 获取指定行的编辑器。每个编辑器有下列属性: actions:编辑器可以做的动作。 target:目标编辑器的 jQuery 对象。 field:字段名。 type:编辑器的类型。 |
| getEditor | param | 获取指定的编辑器,param 参数包含两个属性: id:行节点的 id。 field:字段名。 |
猜您可能还喜欢
- 完美解决iis下JWplayer提示Error loading media: File could not be played错误(4076)
- asp.net mvc+jquery easyui开发基础(一)模块首页及增加、修改、删除模块实现(3434)
- .Net Mvc中使用Jquery EasyUI控件讲解(一)表格控件datagrid使用介绍(3019)
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(七)权限管理模块之系统菜单动态生成(2924)
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(三)登录模块开发(2913)
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(八)权限管理模块之权限管理实现(2523)
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(六)权限管理模块之初始数据准备(2494)
- Jquery ajax访问asp.net web api跨域问题解决方案(1935)
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(五)后台模板html页面集成到项目中(1714)
- .Net Mvc中使用Jquery EasyUI控件讲解(二)树形控件tree使用介绍(1663)
评论列表
发表评论
文章分类
文章归档
阅读排行
- 1. Windows Server 2008 R2永久激活及Chew-WGA v0.9下载(13335)
- 2.Visual Studio 2017中安装visualSVN及使用详解(5236)
- 3.完美解决iis下JWplayer提示Error loading media: File could not be played错误(4076)
- 4.asp.net mvc+jquery easyui开发基础(一)模块首页及增加、修改、删除模块实现(3434)
- 5.Android avax.net.ssl.SSLPeerUnverifiedException: No peer certificate 解决方法(httpClient支持HTTPS的访问方式)(3286)
- 6..Net Mvc中使用Jquery EasyUI控件讲解(一)表格控件datagrid使用介绍(3019)
- 7.asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(七)权限管理模块之系统菜单动态生成(2924)
- 8.asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(三)登录模块开发(2913)
- 9.asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(八)权限管理模块之权限管理实现(2523)
- 10. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(六)权限管理模块之初始数据准备(2494)
