分页之C#封装存储过程(site,bll,dal)
DAL层:
public DataTable GetDataByPage(int pageIndex,int pageSize,out int totalcount)
{
totalcount=0;
//1.0 定义存储过程的名字,一定是在数据库存在的存储过程
string prodname="USP_GetListByPage";
//2.0 定义存储过程需要的参数数组
SqlParameter[] params=new SqlParameter[]{
new SqlParameter("@pageIndex",pageIndex),
new SqlParameter("@pageSize",pageSize),
new SqlParameter("@totalcount",totalcount)
};
//3.0 由于totalcount在存储过程中的参数类型为OUTPUT,所以在此要增加对其的描述
params[2].Direction=ParameterDirection.Output;
//4.0 开始执行,注意执行一定是在获取params[2].Value之前运行,否则获取不到真正的符合条件的数据行数totalcount
DataSet dt=DbHelperSQL.RunProcedure(prodname,params,"list");
if(params[2].Value!=null)
{
totalcount=int.Parse(params[2].Value.ToString());
}
return ds.Tables[0];
}
BLL层:
public List<表实体> GetListByPage(int pageIndex,int pageSize,out int totalcount)
{
DataTable dt=dal.GetListByPage(pageIndex,pageSize,out totalcount);
return DataTableToList(dt);
}
Site层:
public void GetListByPage()
{
//1.0 接受ajax请求或者url请求传递过来的参数
string pageIndex=Request.QueryString["pageIndex"];
string pageSize=Request.Querystrinig["pageSize"];
//2.0 参数合法性验证,判断是否为Int
..........
//3.0 把pageIndex和pageSize转为int,作为参数传递
int ipageIndex=int.Parse(pageIndex);
int ipageSize=int.Parse(pageSize);
int totalcount=0;
//4.0 调用bll层的分页方法
List<表实体> list = bll.GetDataListByPage(ipageIndex,ipageSize,out totalcount);
--在这里有一个问题,我肯定要返回list给前端,但是还要返回totalcount这个总行数,还是返回totalcount/pagesize=总页数,这我就说不定了,这是就要开始
--研究我们的分页控件了。
举例:jPageinate 分页控件
分页控件的使用,看下编文章
//5.0 根据totalcount 和 pagesize 计算出总页数,由于计算有可能是小数,所以应该取得大于此小数的最小整数,如10.1 ,应该取11
decimal totalpage=Math.Ceiling(totalcount / Convert.ToDecimal(ipageSize.ToString()));//因为Math.Ceiling()只能接受double或者decimal参数
//6.0 将数据集合和分页的相关参数响应回给异步对象
AjaxPage obj=new AjaxPage();
obj.status="成功";
obj.datas=list;
obj.totalcount=totalcount;
obj.totalpage=totalpage;
//6.0 利用json序列化器,把obj这个分页实体序列化,返回给异步对象
return calback+"序列化分页实体";
}