EXTtreeGrid分页
这个东西整了两天,关键在于要两个stroe,之所以要两个因为treestroe在分页的时候接受不了返回的总行数,不过有个问题就是第二页分页后显示在没有根节点的行层级显示不是那木明显;
------------------------------------------------------------------------------------------------我是帅气的分割线----------------------------------------------------------------------------------------------------------------------
var me = this;
//重新定义序号
Ext.grid.PageRowNumberer = Ext.extend(Ext.grid.RowNumberer, {
width: 40,
renderer: function (value, cellmeta, record, rowIndex, columnIndex, store) {
if (store.lastOptions.params != null) {
var pageindex = store.lastOptions.params.start;
return pageindex + rowIndex ;
} else {
return rowIndex ;
}
}
});
//定义列
me.gridCols = [
new Ext.grid.PageRowNumberer(),//重新定义 后一页是接前一页的序号
//{
// xtype: "rownumberer",
// text: "序号",
// width: 40
//},//序号循环
{
text: 'nid',
dataIndex: 'nid',
width: 200
},
{
xtype: 'treecolumn',
text: 'id',
dataIndex: 'id',
width: 200
},
{
text: 'Name', dataIndex: 'name',
width: 200
},
{
text: 'Sex', dataIndex: 'sex',
width: 200
},
{
text: 'Age', dataIndex: 'age',
width: 200
}
];
var itemsPerPage = 15;
//定义加载TreeStore
me.treeStore = Ext.create('Ext.data.TreeStore', {
fields: ['nid', 'id', 'name', 'sex', 'age'],
proxy: {
type: 'ajax',
url: YZSoft.$url('YZSoft.Services.REST/BPM/Process.ashx'),
extraParams: {
method: 'GetTreeGrid'
},
reader: {
root: 'children',
totalProperty: 'totalCount' // 一定需要这个参数接受后台返回的总条数
}
},
root: {
id: '0', //根路径
text: '0',
name: "0",
sex: "0",
age: "0",
expanded: true,
}
});
//定义分页Store
me.treeStore2 = Ext.create('Ext.data.JsonStore', {
autoLoad: true,
pageSize: itemsPerPage,
proxy: {
type: 'ajax',
url: YZSoft.$url('YZSoft.Services.REST/BPM/Process.ashx'),
extraParams: {
method: 'GetTreeGrid'
},
reader: {
type: 'json',
root: 'children',
totalProperty: "totalCount"
}
},
fields: [{ name: "id" }, { name: "name" }, { name: "sex" }, { name: "age" }]
});
me.bbar = new Ext.PagingToolbar({
pageSize: itemsPerPage,
store: me.treeStore2,
displayInfo: true,
displayMsg: '显示第 {0} - {1}条记录 共{2}条记录',
displaySize: '5|10|15|20|all',
emptyMsg: "无记录",
listeners: {
change: function (obj, pdata, options) {
//翻页时重载treeStore的值
me.treeStore.load({
params: {
start: pdata.fromRecord,
page: pdata.currentPage,
limit: itemsPerPage
}
});
}
}
});
//定义的panel
me.treegrid = Ext.create('Ext.tree.Panel', {
title: 'Simple Tree',
width: 800,
height: 250,
useArrows: true,//使用Vista-style样式的箭头。
rootVisible: false,
autoScroll: true,
margin: false,
border: false,
animate: true, //动画效果
store: me.treeStore,
bbar: me.bbar,
columns: me.gridCols,
renderTo: Ext.getBody(),
});
后台cs页处理json数据,需要自己处理下返回的json数据,就是treegrid式的数据
public virtual JObject GetTreeGrid(HttpContext context)
{
YZRequest request = new YZRequest(context);
string parentid = request.GetString("node", "0");
int page = request.GetInt32("page", 1);
int start = request.GetInt32("start", 0);
int limit = request.GetInt32("limit", 15);
JObject rv = new JObject();
JArray items = new JArray();
rv["children"] = items;
string sqlpath = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["BPMEPDB"].ConnectionString;
DataTable dtparams = new DataTable();
dtparams.Columns.Add("parentid");
dtparams.Columns.Add("page");
dtparams.Columns.Add("start");
dtparams.Columns.Add("limit");
DataRow dr = dtparams.NewRow();
dr["parentid"] = parentid;
dr["page"] = page;
dr["start"] = start;
dr["limit"] = limit;
DataSet ds = SqlHelper.ExecuteDatasetTypedParams(sqlpath, "GetTreeGrid", dr);
rv["totalCount"] = Convert.ToInt32(ds.Tables[0].Rows[0][0].ToString());
// DataSet ds = SqlHelper.ExecuteDataset(sqlpath, CommandType.Text, sql);
this.GetTreeGridList3(items, ds.Tables[1]);
return rv;
}
//这里处理的思路就是读取第一条数据,看节点有没有子级,有的话递归查找,没有就直接拼接
protected virtual void GetTreeGridList3(JArray items, DataTable dt)
{
for (int i = 0; i < dt.Rows.Count;)
{
string ParentID = dt.Rows[i]["ID"].ToString();
DataRow[] drs = dt.Select("ParentID ='" + ParentID + "'");
if (drs.Length > 0)
{
GetTreeJSON(items, dt, dt.Rows[i]["ParentID"].ToString());
}
else
{
JObject item = new JObject();
items.Add(item);
item["leaf"] = true;
item["nid"] = dt.Rows[i]["NID"].ToString();
item["id"] = dt.Rows[i]["ID"].ToString();
item["name"] = dt.Rows[i]["Name"].ToString();
item["sex"] = dt.Rows[i]["Sex"].ToString();
item["age"] = dt.Rows[i]["Age"].ToString();
// item["expanded"] = true;
dt.Rows.RemoveAt(i);
}
}
}
public virtual void GetTreeJSON(JArray items, DataTable dt, string parentid)
{
DataRow[] drs = dt.Select("ParentID ='" + parentid + "'");
foreach (DataRow dr in drs)
{
parentid = dr["ID"].ToString();
JObject item = new JObject();
items.Add(item);
//根目录变个样子
DataRow[] drs2 = dt.Select("ParentID ='" + dr["ID"].ToString() + "'");
if (drs2.Length > 0)
{
item["leaf"] = false;
item["expanded"] = true;
}
else
{
item["leaf"] = true;
item["expanded"] = false;
}
item["nid"] = dr["NID"].ToString();
item["id"] = dr["ID"].ToString();
item["name"] = dr["Name"].ToString();
item["sex"] = dr["Sex"].ToString();
item["age"] = dr["Age"].ToString();
JArray children = new JArray();
item["children"] = children;
dt.Rows.Remove(dr);
this.GetTreeJSON(children, dt, parentid);
}
}
数据库:

查询语句:
ALTER PROCEDURE [dbo].[GetTreeGrid]
@ParentID NVARCHAR(500) ,
@page INT ,
@start INT ,
@limit INT
AS
BEGIN
;
WITH cte
AS ( SELECT ID ,
[Name] ,
[Sex] ,
[Age] ,
[ParentID] ,
Name AS NAME2
FROM [BPMEPDB].[dbo].[TreeGrid]
WHERE ParentID = @ParentID
UNION ALL
SELECT c.ID ,
c.Name ,
C.Sex ,
c.Age ,
c.ParentID ,
P.NAME AS NAME2
FROM cte P
INNER JOIN [BPMEPDB].[dbo].[TreeGrid] c ON p.ID = c.ParentID
)
SELECT ID ,
[Name] ,
[Sex] ,
[Age] ,
[ParentID] ,
NAME2
INTO #dt
FROM cte
SELECT COUNT(0)
FROM #dt;
SELECT NID ,
ID ,
[Name] ,
[Sex] ,
[Age] ,
[ParentID] ,
NAME2
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY ID ) AS NID ,
ID ,
[Name] ,
[Sex] ,
[Age] ,
[ParentID] ,
NAME2
FROM #dt
) AS a
WHERE
( @page - 1 ) * @limit < NID
AND @page * @limit >= NID
END
GO
效果图:


EXTtreeGrid分页的更多相关文章
- 记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题
最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerP ...
- js实现前端分页页码管理
用JS实现前端分页页码管理,可以很美观的区分页码显示(这也是参考大多数网站的分页页码展示),能够有很好的用户体验,这也是有业务需要就写了一下,还是新手,经验不足,欢迎指出批评! 首先先看效果图: 这是 ...
- JdbcTemplate+PageImpl实现多表分页查询
一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...
- MVC如何使用开源分页插件shenniu.pager.js
最近比较忙,前期忙公司手机端接口项目,各种开发+调试+发布现在几乎上线无问题了:虽然公司项目忙不过在期间抽空做了两件个人觉得有意义的事情,一者使用aspnetcore开发了个人线上项目(要说线上其实只 ...
- NET Core-TagHelper实现分页标签
这里将要和大家分享的是学习总结使用TagHelper实现分页标签,之前分享过一篇使用HtmlHelper扩展了一个分页写法地址可以点击这里http://www.cnblogs.com/wangrudo ...
- 套用JQuery EasyUI列表显示数据、分页、查询
声明,本博客从csdn搬到cnblogs博客园了,以前的csdn不再更新,朋友们可以到这儿来找我的文章,更多的文章会发表,谢谢关注! 有时候闲的无聊,看到extjs那么肥大,真想把自己的项目改了,最近 ...
- php实现的分页类
php分页类文件: <?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 pr ...
- C#关于分页显示
---<PS:本人菜鸟,大手子还请高台贵手> 以下是我今天在做分页时所遇到的一个分页显示问题,使用拼写SQL的方式写的,同类型可参考哦~ ------------------------- ...
- JAVA 分页工具类及其使用
Pager.java package pers.kangxu.datautils.common; import java.io.Serializable; import java.util.List; ...
随机推荐
- openwrt下 samba设置
1. 增加用户: 可以手工直接修改 /etc/passwd, 增加一行: samba:x:102:100::/home/samba:#也可命令如下opkg updateopkg install sha ...
- PLSQL Developer oracle导入导出表及数据
1.进入PLSQL Developer 2.创建新用户(如需要新表空间则需先创建新表空间再创建用户) 3.打开菜单Tools->Export User Objects 导出表及视图等创建SQL ...
- Chrome等浏览器下出现net::ERR_BLOCKED_BY_CLIENT的解决办法
当我们在做开发时,调试页面图片会出现部分图片无法正常显示,并且确认图片的地址正确: 按F12 Debug查看报错原因,提示net::ERR_BLOCKED_BY_CLIENT错误,但当我们点击图片地址 ...
- 超级详细 一听就会:利用JavaScript jQuery实现图片无限循环轮播(不借助于轮播插件)
前言 作为一个前端工程师,无论公司是什么行业,无论你做什么端,基本都会遇到一个避不开的动画效果:循环轮播.做轮播并不难,市场上的轮播插件有很多,其中比较著名的是swiper,使用也非常简单.但轮播插件 ...
- LINUX 笔记-iostat命令
显示CPU和I/O统计信息 iostat的不带参数的显示CPU和I/ O的所有分区的统计信息 -c Display the CPU utilization report. -d Display the ...
- Python 使用正则表达式
当使用正则表达式时,re 模块内部会干两件事情 1.编译正则表达式,如其字串本身不合法,报错 2.用编译后的正则表达式去匹配字符串 re_telephone = re.compile(r'^(\d{3 ...
- python的小基础
变量python中的变量为指向常量的地址当常量没有指向时,系统自动回收内存空间如A = 1B = AA = 2print(A,B)#2,1id(A),id(B)id()为python虚拟机的虚拟地址, ...
- TensorFlow Object Detection API(Windows下测试)
"Speed/accuracy trade-offs for modern convolutional object detectors." Huang J, Rathod V, ...
- 对Spring事务一些问题的讨论
提起spring事务,就会让人联想起四大基本特征,五个隔离级别,七大传播特性.相信大多数人都知道这些东西,但是知道是一回事情,能用好真的是另一回事了.在使用Spring事务的时候,我曾遇到过几个比较严 ...
- 走近 Python (类比 JS)
Python 是一门运用很广泛的语言,自动化脚本.爬虫,甚至在深度学习领域也都有 Python 的身影.作为一名前端开发者,也了解 ES6 中的很多特性借鉴自 Python (比如默认参数.解构赋值. ...