博客
关于我
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/

你可能感兴趣的文章
multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
查看>>
mysql csv import meets charset
查看>>
multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
查看>>
MySQL DBA 数据库优化策略
查看>>
multi_index_container
查看>>
mutiplemap 总结
查看>>
MySQL Error Handling in Stored Procedures---转载
查看>>
MVC 区域功能
查看>>
MySQL FEDERATED 提示
查看>>
mysql generic安装_MySQL 5.6 Generic Binary安装与配置_MySQL
查看>>
Mysql group by
查看>>
MySQL I 有福啦,窗口函数大大提高了取数的效率!
查看>>
mysql id自动增长 初始值 Mysql重置auto_increment初始值
查看>>
MySQL in 太多过慢的 3 种解决方案
查看>>
Mysql Innodb 锁机制
查看>>
MySQL InnoDB中意向锁的作用及原理探
查看>>
MySQL InnoDB事务隔离级别与锁机制深入解析
查看>>
Mysql InnoDB存储引擎 —— 数据页
查看>>
Mysql InnoDB存储引擎中的checkpoint技术
查看>>
Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
查看>>