博客
关于我
GridView的另外一种分页方式,可提高加载速度
阅读量:580 次
发布时间:2019-03-11

本文共 4285 字,大约阅读时间需要 14 分钟。

这几天一直在寻找着如何在能够让GridView加载的时候,速度更快点,但是没有找到。当时只是想利用这种方式:就是利用存储过程在Oracle服务器端进行分页,然后在客户端进行请求的时候,存储过程返回查询的数据集,包括总条数。这样挺好,但是麻烦点,能不能在服务器端就进行处理呢?在CodeProject上面还真的发现了一篇文章,现在让我给“拐卖”了过来,以作备忘吧,希望国外的那位老兄不要用如来神掌来招呼我:

具体的文章链接:

主要的操作逻辑如下:

1、执行DataReader

2、从我们规定的开始的位置执行DataReader

3、执行并得到数据记录

4、将数据记录放到DataTable数据集中

5、结束DataReader

6、返回DataTable数据集。

下面的代码就是针对上面的操作逻辑而来的,主要是“DataReaderToDataTable”方法,具体代码如下:

internal       static    DataTable DataReaderToDataTable(   string    sQuery,    int    iStart,    int    iEnd)         {             DataTable schematable    =       null   ;             DataTable dt    =       null   ;             SqlCommand cmdsql;             SqlDataReader dr    =       null   ;             SqlConnection conn    =       null   ;                long    icount    =       0   ;                try               {                    //   打开数据库连接,执行DataReader                                conn    =       new    SqlConnection(ConnString);                 conn.Open();                 cmdsql    =       new    SqlCommand(sQuery, conn);                 dr    =    cmdsql.ExecuteReader(CommandBehavior.CloseConnection);                 schematable    =    dr.GetSchemaTable();                 dt    =       new    DataTable();                    //   Get the Schema of Tables Columns and its types, and load the same into DataTable.                         for    (   int    i    =       0   ; i    <=    schematable.Rows.Count    -       1   ; i   ++   )                 {                     DataRow dRow    =    schematable.Rows[i];                     DataColumn column    =       new    DataColumn();                     column.DataType    =    System.Type.GetType(dRow[   "   DataType   "   ].ToString());                     column.AllowDBNull    =    (dRow[   "   AllowDBNull   "   ].ToString()    ==       "   True   "       ?       true    :    false   );                     column.ColumnName    =    dRow[   "   ColumnName   "   ].ToString();                     column.Caption    =    dRow[   "   ColumnName   "   ].ToString();                                         dt.Columns.Add(column);                        //   More DataTable property can be added as required.                      }                    if    (iStart    ==       0   ) iStart    =       1   ;                    if    (iEnd    ==       0   ) iEnd    =       1   ;                 icount    =       1   ;                    //   Loop the Reader which is executed till the Start and Variable,                    //   Fetch and add the rows one by one to Data Table Till the End Count is reached.                    //    Exit the loop and Return Datable.                         while    (dr.Read())                 {                        if    (icount    >=    iStart    &&    icount    <=    iEnd)                     {                         DataRow dRow    =    dt.NewRow();                            for    (   int    i    =       0   ; i    <=    dr.FieldCount    -       1   ; i   ++   )                         {                             dRow[i]    =    dr.GetValue(i);                         }                         dt.Rows.Add(dRow);                     }                        else       if    (icount    >    iEnd)                     {                            break   ;                     }                     icount    =    icount    +       1   ;                 }             }                catch    (SystemException ex)             {                    throw    ex;             }                finally               {                 conn.Close();                 conn.Dispose();                 schematable.Dispose();                 dr.Close();                 dr.Dispose();             }                return    dt;         }

在后台绑定到GridView的方法如下:

private       void    BindData(   int    pageIndex)         {                int    startRow;                int    endRow;             startRow    =    (pageIndex    *    grdEmployee.PageSize)    +   1   ;             endRow   =    startRow    +    grdEmployee.PageSize    -   1   ;                            grdEmployee.DataSource   =    CustomPaging.Class.Common.DataReaderToDataTable(SelectQuery,startRow,endRow);             grdEmployee.DataBind();                              }

 以上就是这些方法,感觉还是比较好用的。

转载地址:http://pulvz.baihongyu.com/

你可能感兴趣的文章
Nginx将https重定向为http进行访问的配置(附Demo)
查看>>
nginx工作笔记004---配置https_ssl证书_视频服务器接口等
查看>>
nginx工作笔记005---nginx配置负载均衡_在微服务中实现网关集群_实现TCP传输层协议__http协议的负载均衡
查看>>
nginx常用命令及简单配置
查看>>
Nginx常用屏蔽规则,让网站更安全
查看>>
Nginx常见问题
查看>>
nginx平滑升级解决 nginx 安全漏洞(CVE-2021-23017)和NGINX 环境问题漏洞(CVE-2019-20372)
查看>>
Nginx平滑添加模块
查看>>
Nginx开启gzip网页传输压缩配置
查看>>
nginx开机启动脚本
查看>>
nginx异常:the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx/conf
查看>>
nginx总结及使用Docker创建nginx教程
查看>>
nginx报错:the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:128
查看>>
nginx报错:the “ssl“ parameter requires ngx_http_ssl_module in usrlocalnginxconfnginx.conf128
查看>>
Nginx搭建RTMP服务器+FFmpeg实现海康威视摄像头预览
查看>>
Nginx搭建静态资源映射实现远程访问服务器上的图片资源
查看>>
nginx日志不支持中文
查看>>
nginx日志分割并定期删除
查看>>
Nginx日志分析系统---ElasticStack(ELK)工作笔记001
查看>>
Nginx日志按天分割
查看>>