GridView的另外一种分页方式,可提高加载速度

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

具体的文章链接:http://www.codeproject.com/KB/aspnet/Custom_Paging_AnyDatabase.aspx

主要的操作逻辑如下:

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();
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值