这个东西整了两天,关键在于要两个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分页的更多相关文章

  1. 记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题

    最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerP ...

  2. js实现前端分页页码管理

    用JS实现前端分页页码管理,可以很美观的区分页码显示(这也是参考大多数网站的分页页码展示),能够有很好的用户体验,这也是有业务需要就写了一下,还是新手,经验不足,欢迎指出批评! 首先先看效果图: 这是 ...

  3. JdbcTemplate+PageImpl实现多表分页查询

    一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...

  4. MVC如何使用开源分页插件shenniu.pager.js

    最近比较忙,前期忙公司手机端接口项目,各种开发+调试+发布现在几乎上线无问题了:虽然公司项目忙不过在期间抽空做了两件个人觉得有意义的事情,一者使用aspnetcore开发了个人线上项目(要说线上其实只 ...

  5. NET Core-TagHelper实现分页标签

    这里将要和大家分享的是学习总结使用TagHelper实现分页标签,之前分享过一篇使用HtmlHelper扩展了一个分页写法地址可以点击这里http://www.cnblogs.com/wangrudo ...

  6. 套用JQuery EasyUI列表显示数据、分页、查询

    声明,本博客从csdn搬到cnblogs博客园了,以前的csdn不再更新,朋友们可以到这儿来找我的文章,更多的文章会发表,谢谢关注! 有时候闲的无聊,看到extjs那么肥大,真想把自己的项目改了,最近 ...

  7. php实现的分页类

    php分页类文件: <?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 pr ...

  8. C#关于分页显示

    ---<PS:本人菜鸟,大手子还请高台贵手> 以下是我今天在做分页时所遇到的一个分页显示问题,使用拼写SQL的方式写的,同类型可参考哦~ ------------------------- ...

  9. JAVA 分页工具类及其使用

    Pager.java package pers.kangxu.datautils.common; import java.io.Serializable; import java.util.List; ...

随机推荐

  1. HTML之头部标签

    <header> head 元素元素包含了所有的头部标签元素 可以添加在头部区域的元素标签为: title,style,meta,link,script,noscript,base < ...

  2. 张高兴的 Windows 10 IoT 开发笔记:ToF Sensor VL53L0X

    GitHub : https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/VL53L0X

  3. uva 10118,记忆化搜索

    这个题debug了长达3个小时,acm我不能放弃,我又回来了的第一题! 一开始思路正确,写法不行,结果越改越乱 看了网上某神的代码,学习了一下 coding+debug:4小时左右,记忆化搜索+dp类 ...

  4. nexus3 添加第三方本地文件jar到仓库

    因为nexus3和nexus2手动上传第三方jar有点区别 故记录一下. 如上传京东 open-api-sdk-2.0.jar 首先创建一个目录 方便执行上传的时候url参数 也可以不创建 mkdir ...

  5. Servlet 笔记-生命周期

    Servlet 生命周期可被定义为从创建直到毁灭的整个过程.以下是 Servlet 遵循的过程: Servlet 通过调用 init () 方法进行初始化. Servlet 调用 service()  ...

  6. 表达式求值--Java实现

    /*将中缀表达式--转化为后缀表达式--属于栈的一种应用 *具体思路: *1.扫描字符串,遇到操作数字符直接不管,存到一个字符串里边 *2.操作符优先级比较--定义了方法 * 栈中优先级高:出栈存进字 ...

  7. [译]ASP.NET Core 2.0 路由引擎之网址生成

    问题 如何在ASP.NET Core 2.0中由路由引擎来生成网址? 答案 新建一个空项目,修改Startup.cs文件,添加MVC服务和中间件: public void ConfigureServi ...

  8. Angular5.0.0新特性

    文章来自官网部分翻译https://blog.angular.io/version-5-0-0-of-angular-now-available-37e414935ced Angular5.0.0版本 ...

  9. 2017CCPC秦皇岛G ZOJ 3987Numbers(大数+贪心)

    Numbers Time Limit: 2 Seconds      Memory Limit: 65536 KB DreamGrid has a nonnegative integer n . He ...

  10. KMP (next数组的性质及证明)

    性质:如果len%(len-next[len-1])==0,则字符串中必存在最小循环节,且循环次数即为len/(len-next[len-1]); 证明:在前len个字符组成的字符串,存在最小循环节k ...