列表视图选择自动分页时其实就是添加了一个数据分页器分页控件两者间存在着嵌套关系《Repeater与ListView》 中提到这样的分页并不是高效的因为数据源还是返回了所有的数据而非当前页数据
列表视图选择自动分页时其实就是添加了一个数据分页器分页控件两者间存在着嵌套关系《Repeater与ListView》 中提到这样的分页并不是高效的因为数据源还是返回了所有的数据而非当前页数据
优化方案及步骤:
1.改数据源启用分页属性为真实[允许分页】
设置MaximumRowsParameterName= rowIndex 【MSDN解释:该参数接受检索的行数的值可以理解为:上一页的最后一行的下标】
设置StartRowIndexParameterName= pageSize 【MSDN解释:该参数接受要检索的第一行索引的值可以理解为页面大小即每页显示条数】
SelectCountMethod= GetTotalRowsCount 【需要总行数数时执行的方法即一共有多少条数据告诉分页控件如何显示】
2、此时数据源调用的原有方法getAllClasses不再满足要求需要在业务层中新增一个带MaximumRowsParameterName及StartRowIndexParameterName参数名称的方法以及gettotalrrowscount两个方法
基地址定位连接层添加如下:
复制代码代码如下:查看代码
公共列表模型class getPageListByPage(int pageSize,int rowIndex){ return dal。getPageListByPage(pageSize,rowIndex,false);}
public int GetTotalRowsCount(){ return dal .GetTotalRowsCount();}DAL层添加如下:
复制代码代码如下:查看代码
公共列表模型. class getPageListByPage(int rowIndex,int pageSize,bool is del){ int rowCount=0;int页计数=0;DataTable dt=SqlHelper .getPageListByPage(rowIndex,pageSize,out rowCount,out pageCount,is del);如果(dt .行。计数0) {列表模型。类别列表=新列表模型Classesforeach(数据行博士学位.行){模型。类别模型=新模型ClassesLoadEntityData(型号,博士);列表。添加(型号);}返回列表;}返回null}
public int GetTotalRowsCount(){ string sqlstr= select * from classes where cisdel=0 ;返回SqlHelper .ExecuteScalar(sqlstr);}SqlHelper新增方法如下:
复制代码代码如下:查看代码
public static DataTable getPageListByPage(int rowIndex,int pageSize,out int rowCount,out int pageCount,bool isDel){ DataTable dtcalss=new DataTable();行数=0;页数=0;using(SqlConnection sqlcon=new SqlConnection(Connstr)){ sqldata adapter sda=new sqldata adapter( up _ get page data 2 ,sqlcon);SQL parameter[]pars={ new SQL parameter( @ LastRowIndex ,RowIndex),new SqlParameter ( @pgSize ,pageSize),new SqlParameter ( @rowCount ,rowCount),new SqlParameter ( @pgCount ,pageCount),new SqlParameter ( @isDel ,isDel),};//将两个输出参数的输出方向指定解析器[2]。方向=参数方向。输出;解析器[3]。方向=参数方向。输出;//将参数集合加入到查询命令对象中sda .选择命令。参数。添加范围(解析器);//设置查询命令类型为存储过程sda .选择命令。CommandType=CommandType .存储过程;//执行存储过程sda .填充(dtcalss);//执行完后将存储过程获得的两个输出参数值赋给此方法的两个输出参数rowCount=Convert .ToInt32(解析器[2])。值);pageCount=Convert .ToInt32(解析器[3])。值);}返回dtcalss }存储过程up_GetPageData2代码如下:
复制代码代码如下:查看代码
create proc up _ get page data 2 @ LastRowIndex int,-上一页的最后一行的下标@pgSize float,-页容量@rowCount int输出,-输出总行数@pgCount int输出,-输出总页数@isDel位-数据是否删除as begin select @ rowCount=count(*)from类,其中cisdel=@isDel -查出总行数set @ pgCount=ceiling(@ rowCount/@ pgSize)-算出总页数select * from(select Row _ Number()over(order by cid)as RNum,* from classes where cisdel=@ isDel)as temp where RNum @ LastRowIndex and RNum=@ LastRowIndex @ pgsizeendlistview。aspx代码如下:
复制代码代码如下:查看代码
% @ Page Language= c# AutoEventWireup= true code behind= listview。aspx。cs Inherits= web窗体.ListView"%!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www。w3。org/TR/XHTML 1/DTD/XHTML 1-过渡。DTD html xmlns= http://www。w3。org/1999/XHTML head runat= server title/title/head body form id= form 1 runat= server div
ASP:object data source ID= object data source 1 runat= server select method= getPageListByPage TypeName= BLL .类"数据对象类型名称="模型 class Delete method= SoftDel insert method= Add update method= Modify enable paging= True MaximumRowsParameterName= rowIndex select count method= GetTotalRowsCount startrowindexparamname= pageSize /ASP:object data source ASP:ListView ID= ListView 1 runat= server data source I= object data source 1 insert item position= last item alternating item template tr style= TD ASP:Button ID= Delete Button runat= server删除/ASP:Button ID= Edit Button runat= server command name= Edit Text=编辑//TD TD ASP:Label ID= CID Label runat= server Text= % # Eval( CID )% //TD TD ASP:Label ID= CName Label runat= server Text= % # Eval( CName )% //TD TD TD ASP:Label ID= CCount Label runat= server Text= % # Eval( CCount )% //TD TD ASP:Label ID= CImg Label runat= server Text= % # Eval( CImg )% //TD TD ASP:CheckBox ID= CIsDelCheckBox runat= server Checked= % # Eval(。
edit item template tr style= TD ASP:Button ID= Update Button runat= server command name= Update Text=更新/ASP:Button ID= Cancel Button runat= server command name= Cancel Text=取消//TD TD ASP:TextBox ID= CID TextBox runat= server Text= % # Bind( CID )% //TD TD ASP:TextBox ID= CName TextBox runat= server Text= % # Bind( CName )% //TD TD ASP:TextBox ID= CCount TextBox runat= server Text= % # Bind( CCount )% //TD TD ASP:TextBox ID= CImgTextBox runat= server Text= % # Bind( CImg )% //TD TD ASP:CheckBox ID= CIsDelCheckBox runat= server Checked= % # Bind( CIsDel )% //TD TD ASP:TextBox ID= CAddTimeTextBox runat= server Text= % # Bind( CAddTime )% //TD/tr/edit item template EmptyDataTemplate table runat= server
style= tr td未返回数据/TD/tr/table/EmptyDataTemplate插入项模板tr style= TD ASP:Button ID= Insert Button runat= server command name= Insert Text=插入/ASP:Button ID= Cancel Button runat= server command name= Cancel Text=清除//TD TD ASP:TextBox ID= CID TextBox runat= server Text= % # Bind( CID )% //TD TD ASP:TextBox ID= CName TextBox runat= server Text= % # Bind( CName )% //TD TD ASP:TextBox ID= CCount TextBox runat= server Text= % # Bind( CCount )% //TD TD ASP:TextBox ID= CImgTextBox runat= server Text= % # Bind( CImg )% //TD TD ASP:CheckBox ID= CIsDel CheckBox runat= server Checked= % # Bind( CIsDel )% //TD TD ASP:TextBox ID= CAddTimeTextBox runat= server Text= % # Bind( Bind insert item template item template tr style= TD ASP:Button ID= Delete Button runat= server command name= Delete Text=删除/ASP:Button ID= Edit Button runat= server command name= Edit Text=编辑//TD TD ASP:Label ID= CID Label runat= server Text= % # Eval( CID )% //TD TD ASP:Label ID= CName Label runat= server Text= % # Eval( CName )% //TD TD ASP:Label ID= account Label runat= server Text= % # Eval( CCount )% //TD TD ASP:Label ID= CImg Label runat= server Text= % # Eval( CImg )% //TD TD ASP:CheckBox ID= CIsDelCheckBox runat= server Checked= % # Eval( CIsDel )% Enabled= false //TD TD ASP:Label ID= CAddTimeLabel runat= server Text= % # Eval( CAddTime )% //TD/tr/item模板布局模板表runat= server tr runat
style= tr runat= server style= th runat= server /th runat= server CID/th runat= server CName/th runat= server account/th runat= server CImg/th runat= server CIsDel/th runat= server cadd time/th/tr tr ID= item placeholder runat= server /tr/table/TD/tr runat= server TD runat= server
style= /TD/tr/table/layout template selecteditem template tr style= TD ASP:Button ID= Delete Button runat= server command name= Delete Text=删除/ASP:Button ID= Edit Button runat= server command name= Edit Text=编辑//TD TD ASP:Label ID= CID Label runat= server Text= % # Eval( CID )% //TD TD ASP:Label ID= CName Label runat= server Text= % # Eval( CName )% //TD TD ASP:Label ID= account Label runat= server Text= % # Eval( CCount )% //TD TD ASP:Label ID= CImg Label runat= server Text= % # Eval( CImg )% //TD TD ASP:CheckBox ID= CIsDelCheckBox runat= server Checked= % # Eval( CIsDel )% Enabled= false //TD TD ASP:Label ID= CAddTimeLabel runat= server Text= % # Eval( CAddTime )% //TD/tr/selecteditem template
/div ASP:data pager ID= data pager 1 runat= server paged control= listview 1 PageSize= 5 Fields ASP:NextPreviousPagerField Button type= Button ShowFirstPageButton= True ShowLastPageButton= True /Fields/ASP:data pager/form/body/html 3、界面中列表视图一取消开启分页自动分页拖入分页控件数据页面并设置PagedControlID=ListView1 使其与列表视图一建立关联
4、修改数据源调用的方法为getPageListByPage运行结果如下:
补充:
如果运行报错对象数据源“对象数据源1”未能找到带参数的非泛型方法" getPageListByPage ":页面大小,页面索引
只需删除aspx界面中
选择参数
asp:参数默认值= 5 Name= pageSize Type= int 32 /
asp:参数名称=rowIndex 类型=Int32 /
/选择参数