public class MPage
{
private string pagesql;//产生的sql语句
private int pagesize;//每页显示的条数
private int pageindex;//显示页的索引
/// <summary>
/// 产生分页的sql语句 sql要求必须包含rownum字段且其别名为rn,如例子:select rownum rn,t.* from test t
/// </summary>
public string Pagesql
{
get { return pagesql; }
set { pagesql = value; }
}
/// <summary>
/// 每页显示的条数
/// </summary>
public int Pagesize
{
get { return pagesize; }
set { pagesize = value; }
}
/// <summary>
/// 显示页的索引 从0开始
/// </summary>
public int Pageindex
{
get { return pageindex; }
set { pageindex = value; }
}
}
分页查询类:
/// <summary>
/// 获取分页的记录
/// </summary>
/// <param name="page">封装的页面对象</param>
/// <param name="result">反馈的结果</param>
/// <returns>结果集的表</returns>
public DataTable GetPageRecord(MPage page, out ArrayList result)
{
OracleParameter[] oracleParameter = new OracleParameter[6];
oracleParameter[0] = new OracleParameter("p_pagesql", OracleType.VarChar);
oracleParameter[0].Direction = ParameterDirection.Input;
oracleParameter[0].Value = page.Pagesql;
oracleParameter[1] = new OracleParameter("p_pagesize", OracleType.Number);
oracleParameter[1].Direction = ParameterDirection.Input;
oracleParameter[1].Value = page.Pagesize;
oracleParameter[2] = new OracleParameter("p_pageindex", OracleType.Number);
oracleParameter[2].Direction = ParameterDirection.Input;
oracleParameter[2].Value = page.Pageindex;
oracleParameter[3] = new OracleParameter("p_totalcount", OracleType.Number);
oracleParameter[3].Direction = ParameterDirection.Output;
oracleParameter[4] = new OracleParameter("p_pagecount", OracleType.Number);
oracleParameter[4].Direction = ParameterDirection.Output;
oracleParameter[5] = new OracleParameter("p_currentpagedata", OracleType.Cursor);
oracleParameter[5].Direction = ParameterDirection.Output;
DataAccess da = new DataAccess();
return da.ExecuteProcedureWithTable(DBConn.sb, ref oracleParameter, "p_app_page", out result);
}
用aspnetpager控件和repeater控件结合oracle存储过程绑定:
/// <summary>
/// 用aspnetpager控件和repeater控件结合oracle存储过程绑定
/// </summary>
/// <param name="aspnetpager">aspnetpager控件</param>
/// <param name="bindingtarget">repeater控件</param>
/// <param name="pagesql">执行的sql语句</param>
public void BindingRepeaterWithAspNetPager(AspNetPager aspnetpager, Repeater bindingtarget, string pagesql)
{
int recordcount = 0;
ArrayList result = null;
MPage page = new MPage();
page.Pagesize = aspnetpager.PageSize;//每页显示的条数
page.Pageindex = aspnetpager.StartRecordIndex / aspnetpager.PageSize;//显示页的索引 从0开始
page.Pagesql = pagesql;//产生分页的sql语句 sql要求必须包含rownum字段且其别名为rn,如例子:select rownum rn,t.* from test t
bindingtarget.DataSource = GetPageRecord(page, out result);
bindingtarget.DataBind();
if (result != null && result.Count > 0)
{
if (int.TryParse(result[3].ToString(), out recordcount))
{
aspnetpager.RecordCount = recordcount;
}
else
{
aspnetpager.RecordCount = 0;
}
}
}
aspnetpager控件和repeater控件直接绑定datatable:
/// <summary>
/// aspnetpager控件和repeater控件直接绑定Datatable
/// </summary>
/// <param name="aspnetpager">aspnetpager控件</param>
/// <param name="bindingtarget">repeater控件</param>
/// <param name="dt">Datatable</param>
public void BindingRepeaterWithAspNetPagerByDataTable(AspNetPager aspnetpager, Repeater bindingtarget, DataTable dt)
{
PagedDataSource pds = new PagedDataSource();
pds.AllowPaging = true;
pds.PageSize = aspnetpager.PageSize;
pds.CurrentPageIndex = aspnetpager.CurrentPageIndex - 1;
pds.DataSource = dt.DefaultView;
aspnetpager.RecordCount = pds.DataSourceCount;
bindingtarget.DataSource = pds;
bindingtarget.DataBind();
}
create or replace package jssb.pck_page is
type T_Page is ref cursor; --定义游标变量用于返回记录集
procedure getpagerecord(
pindex in number, --分页索引
psql in varchar2, --产生dataset的sql语句
psize in number, --页面大小
pcount out number, --返回分页总数
v_cur out T_Page --返回当前页数据记录
);
end pck_page;
create or replace procedure jssb.p_app_GetCount(
p_sql in varchar2,
p_count out number
)
as
v_sql varchar2(1000);
v_prcount number;
begin
v_sql := 'select count(*) from (' || p_sql || ')';
execute immediate v_sql into v_prcount;
p_count := v_prcount; --返回记录总数
end p_app_GetCount;
create or replace procedure jssb.p_app_page(
p_pagesql in varchar2,--产生分页的sql语句 sql要求必须包含rownum字段且其别名为rn,如例子:select rownum rn,t.* from test t
p_pagesize in number, --每页显示的条数
p_pageindex in number,--显示页的索引 从0开始
p_totalcount out number,--总条数
p_pagecount out number,--总页数
p_currentpagedata out pck_page.T_Page --返回当前页的数据
)
as
begin
pck_page.getpagerecord(p_pageindex,p_pagesql,p_pagesize,p_pagecount,p_currentpagedata);
p_app_getcount(p_pagesql,p_totalcount);
end;
create or replace package body jssb.pck_page is
procedure getpagerecord(
pindex in number,
psql in varchar2,
psize in number,
pcount out number,
v_cur out T_Page
)
as
v_sql varchar2(1000);
v_count number;
v_plow number;
v_phei number;
begin
v_sql := 'select count(*) from (' || psql || ')';
execute immediate v_sql into v_count;
pcount := ceil(v_count/psize);
v_phei := pindex * psize + psize;
v_plow := v_phei - psize + 1;
--psql := select rownum rn,t.* from test t ; --要求必须包含rownum字段
v_sql := 'select * from (' || psql || ') where rn between ' || v_plow || ' and ' || v_phei ;
open v_cur for v_sql;
end getpagerecord;
end pck_page;