ExtJs 备忘录(6)—— GirdPanl表格(二) [ 搜索分页 ]

简介:

 一、效果图

 

二、代码实现

    2.1  客户端

      tablepage.aspx

        Ext.onReady( function () {
            Ext.QuickTips.init();
            Ext.form.Field.prototype.msgTarget 
=   ' side ' ;

            
// 搜索id
             var  id  =   new  NumberField( ' tbSearch ' );
            id.style
= ' text-align:center ' ; // 设置文本居中

            
var  store  =   new  Ext.data.Store({
                proxy: 
new  Ext.data.HttpProxy({
                    url: 
' tablepage.aspx?method=search ' ,
                    method: 
' GET '
                }),
                reader: 
new  Ext.data.JsonReader({
                    totalProperty: 
' count ' ,
                    root: 
' result '
                }, [
                        { name: 
' Name '  },
                        { name: 
' Id '  },
                        { name: 
' Email '  },
                        { name: 
' Gender '  }
                ]),
                baseParams:{    
                    id : 
'' ,         // 用于分页时保存搜索条件
                    limit:  10         // 每页显示数量
                }
            });
            
            
// 加载数据
            store.load();
            
            
// 遍历数据
//
            store.each(function(record) {   
//
                alert(record.get('name'));   
//
            }); 
//
            for (var i = 0; i < store.getCount(); i++) {   
//
                var record = store.getAt(i);   
//
                alert(record.get('name'));   
//
            }  

            

            
var  dataColumns  =   new  Ext.grid.ColumnModel({
                columns: [
                    
new  Ext.grid.RowNumberer(),  // 显示行号
                    { header:  " 编  号 " , dataIndex:  ' Id ' , sortable:  true  },
                    { header: 
" 名  称 " , dataIndex:  ' Name '  },
                    { header: 
" 邮  箱 " , dataIndex:  ' Email '  },
                    { header: 
" 性  别 " , dataIndex:  ' Gender '  }
                ],
                defaults: {
                    align: 
' center '
                }
            });

            
var  grid  =   new  Ext.grid.GridPanel({
                store: store,
                cm: dataColumns,    
// columns: [{}]
                renderTo: Ext.getBody(),
                
// autoExpandColumn: 1,
                title:  ' <center style="curor:hand" onclick="window.location.reload();">搜索与分页</center> ' ,
                autoScroll: 
true ,
                autoHeight: 
true ,
                border: 
true ,
                disableSelection: 
true ,
                enableHdMenu:
false ,
                frame: 
true ,
                loadMask: { msg: 
' 正在加载数据,请稍侯…… '  },      // loadMask: true,
                stripeRows:  true // 隔行显示不同颜色
//
                bodyStyle:'width:99.8%',
//
                autoWidth:true,
                width:  800 ,

                
// 设置单行选中模式
                selModel:  new  Ext.grid.RowSelectionModel({ singleSelect:  false  }),
                
// 使列自动均分
                viewConfig: {
                    forceFit: 
true
                },
                
                
// 搜索条
                tbar:  new  Ext.Toolbar({
                    items:[
                        
new  Ext.form.Label({ text: ' 编号:  '  }),
                        id,{   
                            iconCls: 
" add " , text:  ' 搜索 ' ,
                            handler:
function (){
                                
// 注意 sum 需要等数据加载完毕才能计算出来,不然始终为0
                                 // alert(store.sum('Id'));
                                grid.store.baseParams[ ' id ' =  id.getValue(); // 防止分页时丢失
                                grid.store.reload();
                            }  
                         } 
                    ]
                }),

                
// 底部分页工具条
                bbar:  new  Ext.PagingToolbar({
                    pageSize: 
10 , // 此处应与limit一致
                    store: store,
                    displayInfo: 
true ,
                    emptyMsg: 
' 没有记录 '
                })
            }); 
        });

      代码说明:

        实现了非常简单搜索和分页,需要注意的是关于搜索分页时搜索结果丢失的问题,这里采取了两个步骤:先是在Ext.data.Store的baseParams中声明搜索传值变量,然后再点击搜索按钮时将搜索条件存入到baseParams里,这样分页时条件可以保持下来。

    2.2  服务端

      tablepage.aspx.cs

     public   override   string  Search()
    {
        
int  start  =   - 1 ;
        
int .TryParse(Request.QueryString[ " start " ],  out  start);
        
int  limit  =   - 1 ;
        
int .TryParse(Request.QueryString[ " limit " ],  out  limit);
        
string  id  =  Request.QueryString[ " id " ];
        IList < User >  result  =   new  List < User > ();

        
if  ( string .IsNullOrEmpty(id))
            result  =  GetPage(ConverToList(dataSource.Values), start, limit);
        
else
        {
            
int  uid;
            
if  ( int .TryParse(id,  out  uid))
            {
                
if  (dataSource.ContainsKey(uid))
                    result.Add(dataSource[uid]);
            }
        }

        
return   new  StringBuilder().Append( " {count: " )
        .Append( 1000 )
        .Append( " ,result: " )
        .Append(JavaScriptConvert.SerializeObject(result))
        .Append( ' } ' )
        .ToString();
    }

    
#region  数据源

    
private   static  IDictionary < int , User >  dataSource  =   new  Dictionary < int , User > ();

    
static  tablepage()
    {
        
for  ( int  i  =   0 ; i  <   1000 ; i ++ )
        {
            User user  =  BuildUser(i);
            dataSource.Add(user.Id, user);
        }
    }

    
private   static  IList < User >  GetPage(IList < User >  data,  int  start,  int  limit)
    {
        IList < User >  result  =   new  List < User > ();
        
int  length  =  start  +  limit;
        
if  (length  >  data.Count)
            length  =  data.Count;
        
for  ( int  i  =  start; i  <  length; i ++ )
        {
            result.Add(data[i]);
        }
        
return  result;
    }

    
private   static  IList < User >  ConverToList(ICollection < User >  users)
    {
        User[] result  =   new  User[users.Count];
        users.CopyTo(result,  0 );
        
return  result;
    }

    
private   static  User BuildUser( int  number)
    {
        
return   new  User()
        {
            Id  =  number,
            Email  =   string .Format( " test{0}163.com " , number),
            Name  =   string .Format( " test{0} " , number),
            Gender  =   new  Random().Next( 2 )
        };
    }

    
class  User
    {
        
///   <summary>
        
///  编号
        
///   </summary>
         public   int  Id {  get set ; }
        
///   <summary>
        
///  邮箱
        
///   </summary>
         public   string  Email {  get set ; }
        
///   <summary>
        
///  名称
        
///   </summary>
         public   string  Name {  get set ; }
        
///   <summary>
        
///  性别 0 女 1 男
        
///   </summary>
         public   int  Gender {  get set ; }
    }

    
#endregion

    代码说明:

      这里仍然没有连接数据库,模拟数据与分页查询。

    2.3  存储过程

CREATE   PROCEDURE  dbo.DataPager
    (
        
@StartIndex          INT   =   0  ,
        
@Limit              INT   =   15 ,
        
@RowsCount          INT   =   0  OUTPUT,          --  输出记录总行数
         @SQLString          VARCHAR ( 500 )            
    )
AS
    
SET  NOCOUNT  ON
    
    
SELECT   IDENTITY ( INT , 1 , 1 AS   [ NewID ] , *   INTO  #TMP_ZSFLZ1  FROM   [ TB_XJYJZ ]   WHERE   1 = 2
    
    
INSERT   INTO  #TMP_ZSFLZ1  EXEC  sp_executesql  @SQLString
    
    
-- 总行数
     SELECT   @RowsCount   =   COUNT ( [ NewID ] FROM  #TMP_ZSFLZ
    
    
SET   @StartIndex   =   @StartIndex   +   1
    
    
SELECT   *   FROM  #TMP_ZSFLZ tz
    
WHERE   [ NewID ]   BETWEEN   @StartIndex   AND   @StartIndex   +   @Limit   -   1
    
    
DROP   TABLE  #TMP_ZSFLZ
    
    
RETURN
GO

    代码说明:

      虽然本文没有用到,倒是实际中肯定要用到的,这里写一个样例,仅供参考(注意:这里是SQL2000的例子)。

三、下载 

     ExtJS2009-11-30

本文转自博客园农民伯伯的博客,原文链接:ExtJs 备忘录(6)—— GirdPanl表格(二) [ 搜索分页 ],如需转载请自行联系原博主。

目录
相关文章
|
Windows
Windows系统 services.msc命令详解,Windows命令行查看本地服务
第一步、打开cmd 按下 win 键,输入 cmd 后回车,打开「命令提示符」
1523 0
Windows系统 services.msc命令详解,Windows命令行查看本地服务
|
C语言 内存技术
C语言—指针读写
主要介绍了如何利用指针实现读写操作。
236 0
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
475 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
7月前
|
Java 关系型数据库 MySQL
JDK、Tomcat、MariaDB数据库和Profile多环境的配置与使用
以上就是JDK、Tomcat、MariaDB数据库和Profile多环境的配置与使用的基本步骤。这些步骤可能会因为你的具体需求和环境而有所不同,但是基本的思路是一样的。希望这些信息能够帮助你更好地理解和使用这些工具。
258 17
|
JavaScript API
Vue学习之--------列表排序(ffilter、sort、indexOf方法的使用)、Vue检测数据变化的原理(2022/7/15)
这篇博客文章讲解了Vue中列表排序的方法,使用`filter`、`sort`和`indexOf`等数组方法进行数据的过滤和排序,并探讨了Vue检测数据变化的原理,包括Vue如何通过setter和数组方法来实现数据的响应式更新。
Vue学习之--------列表排序(ffilter、sort、indexOf方法的使用)、Vue检测数据变化的原理(2022/7/15)
|
消息中间件 存储 Kafka
Kafka架构及基本概念
刚开始了解Kafka时对其中多个名词表示懵逼,broker是啥?咋还有分区?有没有跟和我一样有很多???本文就我对Kafka的理解梳理各个角色以及功能,欢迎大家一起来沟通交流
324 0
|
数据采集 存储 JSON
手写解析微信Matrix性能监控日志的工具
手写解析微信Matrix性能监控日志的工具
手写解析微信Matrix性能监控日志的工具
|
机器学习/深度学习 人工智能
人工智能领域英文简称
人工智能领域英文简称
252 0