这个东西整了两天,关键在于要两个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. 转:用STL中的vector动态开辟二维数组

    用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int mai ...

  2. 如何在不同的语言/平台中获取Android ID

    如何在不同的语言/平台中获取Android ID 最近开发工作中需要使用到AndroidID,在Unity和native code中也需要使用,java获取很方便,Unity中也不难,最难的是在nat ...

  3. .NET企业级应用WebService上传下载文件

    在建立好一个WebService后会有一个自带的 [WebMethod]//在待会写的所有方法中都要写这个,便于调试 public string HelloWorld() { return " ...

  4. ADO.NET知识点

    今天复习到了ADO.NET,就把他们的知识梳理总结出来 ADO.NET 是一组向 .NET 程序员公开数据访问服务的类.提供了对各种关系数据.XML 和应用程序数据的访问. 所有的数据访问类位于Sys ...

  5. java将map拼接成“参数=值&参数=值”

    Java将Map拼接成"参数=值&参数=值" 把一个map的键值对拼接成"参数=值&参数=值"即"username=angusbao& ...

  6. 【译】10分钟学会Pandas

    十分钟学会Pandas 这是关于Pandas的简短介绍主要面向新用户.你可以参考Cookbook了解更复杂的使用方法 习惯上,我们这样导入: In [1]: import pandas as pd I ...

  7. bug:翻页

    本章主要分享下,个人测试经历中遇见过的翻页bug 一.列表翻页 1.bug1:去请求翻页page=0,从0页开始算.一般来说page=0 和 page=1的数据是一模一样,所以翻第2页时会发现和第1页 ...

  8. Oracle 表空间扩充

    Oracle 表空间扩充 一.现场环境: (1)操作系统:AIX (2)数据库:Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - ...

  9. 1053: [HAOI2007]反素数ant

    1053: [HAOI2007]反素数ant Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3480  Solved: 2036[Submit][St ...

  10. rsync服务精讲 -- 视频

    rsync服务 开源数据同步工具rsync视频(老男孩分享) 浏览网址 01-rsync基础介绍 http://oldboy.blog.51cto.com/2561410/1216550 11-rsy ...