引用:http://www.cnblogs.com/hermes262/archive/2007/09/19/899160.html
前面已经写了很多篇关于SqlPager的文章了,对于Sqlpager本身我就不再多说了!这次我算是我对SqlPager的最后改进了吧!
主要的改进是在上一次修改了其样式表指定和数字分页的基础上进行的,主要修改的地方是分页的方式,原来一直是使用的select top 的分页,现在我改为了使用SQL存储过程分页了!主要是在使用原来那种分页方式的时候遇到了很多问题,最突出的一个问题就是无法使用飞关键字段排序,所以这次我对其进行了这个修改,相信通过这次的修改已经基本能够满足一般的需求了!
在此我就不用贴出可具体的代码了,代码的会作为附件供需要使用的人下载!在此我只说明一些要注意的地方。在此我在此写出调用的方法,因为和以前比有点变动。
用于数据绑定的方法:( 新加了注释)
/// <summary>
/// 绑定数据
/// </summary>
/// <param name="SQL">SQL语句</param>
private void BindGrid(string SQL)
{
//需要注意的一些问题
/*
* 1.排序只能有一个字段的排序 这里还可以优化,望大家改进
* 2.这个参数 string SQL 如果其查询中有形如 like '%jj%'之类的含有单引号的,请把单引号换成 如 like ''%jj%''
* 3.最后那个where条件必须加上,至于加什么自己根据需要写,如果没有条件的也必须写个条件,如主键>0之类的
* */
this.BindSqlPager(SqlPager1,LJHSqlPager2.SortMode.ASC ,"OrderID","OrderID",this.ConnectString,"DataGrid1",SQL,"("+SQL+")","*","OrderID>0");
}
/// <summary>
/// 绑定SqlPager数据 存储过程的分页
/// </summary>
/// <param name="sqlPager">SqlPager控件ID</param>
/// <param name="sort">排序方式</param>
/// <param name="sortfied">排序字段</param>
/// <param name="FieldKey">关键字段(主键)</param>
/// <param name="ConnectString">数据库链接字符串</param>
/// <param name="ControlName">绑定的网格控件</param>
/// <param name="CommandText">SQL语句</param>
/// <param name="TableName">数据表表名(可以是复杂的查询)</param>
/// <param name="Fields">查询字段</param>
/// <param name="SqlCondition">Where条件</param>
public void BindSqlPager(LJHSqlPager2.SqlPager sqlPager,LJHSqlPager2.SortMode sort,
string sortfied,string FieldKey, string ConnectString,string ControlName, string CommandText,
string TableName,string Fields,string SqlCondition)
{
sqlPager.ConnectionString=ConnectString;
sqlPager.ControlToPaginate=ControlName;
sqlPager.SelectCommand=CommandText;
sqlPager.SortMode=sort;
sqlPager.FieldKey=FieldKey;
sqlPager.SortField=sortfied;
sqlPager.TableName=TableName;
sqlPager.Fields=Fields;
sqlPager.SQLCondition=SqlCondition;
sqlPager.DataBind();
}
/// 绑定数据
/// </summary>
/// <param name="SQL">SQL语句</param>
private void BindGrid(string SQL)
{
//需要注意的一些问题
/*
* 1.排序只能有一个字段的排序 这里还可以优化,望大家改进
* 2.这个参数 string SQL 如果其查询中有形如 like '%jj%'之类的含有单引号的,请把单引号换成 如 like ''%jj%''
* 3.最后那个where条件必须加上,至于加什么自己根据需要写,如果没有条件的也必须写个条件,如主键>0之类的
* */
this.BindSqlPager(SqlPager1,LJHSqlPager2.SortMode.ASC ,"OrderID","OrderID",this.ConnectString,"DataGrid1",SQL,"("+SQL+")","*","OrderID>0");
}
/// <summary>
/// 绑定SqlPager数据 存储过程的分页
/// </summary>
/// <param name="sqlPager">SqlPager控件ID</param>
/// <param name="sort">排序方式</param>
/// <param name="sortfied">排序字段</param>
/// <param name="FieldKey">关键字段(主键)</param>
/// <param name="ConnectString">数据库链接字符串</param>
/// <param name="ControlName">绑定的网格控件</param>
/// <param name="CommandText">SQL语句</param>
/// <param name="TableName">数据表表名(可以是复杂的查询)</param>
/// <param name="Fields">查询字段</param>
/// <param name="SqlCondition">Where条件</param>
public void BindSqlPager(LJHSqlPager2.SqlPager sqlPager,LJHSqlPager2.SortMode sort,
string sortfied,string FieldKey, string ConnectString,string ControlName, string CommandText,
string TableName,string Fields,string SqlCondition)
{
sqlPager.ConnectionString=ConnectString;
sqlPager.ControlToPaginate=ControlName;
sqlPager.SelectCommand=CommandText;
sqlPager.SortMode=sort;
sqlPager.FieldKey=FieldKey;
sqlPager.SortField=sortfied;
sqlPager.TableName=TableName;
sqlPager.Fields=Fields;
sqlPager.SQLCondition=SqlCondition;
sqlPager.DataBind();
}
对此方法说明一点:(在调用方法的时候)
this.BindSqlPager2(this.SqlPager1,LJHSqlPager2.SortMode.DESC,this.GetOrderField(),"ListID",this.GetDbConnecString(),"dgComments",SQL,"("+SQL+")","*","ListID>0");
这里的SQL也就是 上面方法中的TableName参数,因为有时候我们的SQL比较复杂,所以表可能是一个比较复杂的SQL语句;如果只是一张表的查询,那么那里就知用写表名就可以了!其他的我就不多说了,如果大家还有不清楚地可以留言或者联系我!本人晚上在上网,白天公司禁止上网!
源码下载地址(附存储过程):SqlPager.RAR
实在抱歉,里面的那个分页存储过程不是我在控件中使用的那个,在此向下载了的弟兄们表示歉意。
正确的存储过程:分页存储过程下载
应大家的要求,特写了个小Demo,数据库为SqlServer自带的Northwind
下载地址:Demo下载
Demo运行效果图: