asp.net mvc4 mysql制作简单分页组件(部分视图)
在开始做关系型数据库分页功能组件前,便设定的是要有一定可复用性。先在项目里视图文件夹下右键新建名为_PaginationComponent.cshtml,这里超文本标记语言及钢性铸铁我采用的引导程序分页组件,这可以参考http://v3.bootcss.com/components/。
先将生成项目效果截图呈上:
这里有需要预先知道的,是关系型数据库分页查询与mssql分页查询实现不同点在于,mysql支持限制语句,极限格式为限制页面索引*页面大小,页面大小,页面索引-为页数,页面大小-为页面包含数据量极限。具体用法可查询关系型数据库手册。然后需要预先定义好页面大小、页面索引、页面计数(分页总数)三个量。这里预设页面大小为30,即:int pageSize=30。
首先来实现获取页数:思路是,先将要获取的所有数据集从数据库中取出,根据页面大小=30得出总页数,这里会遇到数据集数量为30的倍数与否问题,解决是:
MySqlCommand comm _ 1=新的MySqlCommand(sqlSearch,connection);MySqlDataAdapter da_1=新的mysqldatadapter(SqL SerVices,连接);da_1 .SelectCommand=comm _ 1;//初始化填充的命令数据集set_1=新数据集();da_1 .填充(set _ 1);数据表dt_1=集_1 .表[0];//使用数据表装所得多张表数据,并获取里面的第一张表Count=(double)(dt_1 .行数。计数)/30;//分页总页数if (Count (int)(dt_1).划船。计数)/30){页数=(dt _ 1 .行数。计数)/30 1;} else if (Count==(dt_1 .划船。计数)/30){页数=(dt _ 1 .行数。计数)/30;} else if (Count (int)(dt_1).行数。计数)/30) {页数=1;}这里用到判断,大于30的页数均往上加1,小于30的页数为1。
接下来要实现的是用页面索引传页数获取对应的数据集,思路是利用限制语句特性:
public listmode getdormitrybottlerecilelistpaging(int page index,int page size){ Get _ Connection();列表模型列表=空字符串sqlpagitionsearch=' SELECT * FROM table ORDER BY file _ 1 ASC LIMIT '(页面索引- 1) * 30 ','页面大小;//填充分页后的数据MySQL command _ comm 2=新的MySqlCommand(sqlpaginationsearch,connection);MySqlDataAdapter da_2=新的MySQL data adapter(sqlp阴道搜索,连接);da_2 .选择命令=comm _ 2;//初始化填充的命令数据集set_2=新数据集();da_2 .填充(set _ 2);数据表dt_2=set_2 .表[0];//使用数据表装所得多张表数据,并获取里面的第一张表if (dt_2!=空dt_2 .行数。计数0){ list=new listmode();foreach(dt _ 2中的数据行行。行){模型实体=sqlhelper .CreateItem(行);名单添加(实体);} } Close _ Connection();退货清单;}字符串sqlp阴道搜索=' SELECT * FROM table ORDER BY file _ 1 ASC LIMIT '(页面索引-1)* 30 ','页面大小';//填充分页后的数据这是核心结构化查询语言语句,通过页面索引传入页面数,从(页面索引- 1) * 30处开始取页面大小量的数据。在控制器的行为中实现也是关键:
公共操作结果dormitrybottlerecilesort(int id=1){ int page index=id;//传递分页数int pageSize=30int页数=0;ListBottleRecycleModel list _ 1;list_1=pbsAccess .getdormitrybottlerecilelistpaging(页面索引、页面大小、页面计数);//获取分页列表视图包列表计数=列表1 .计数;bottlerecilelist视图bottlerecilelist=new bottlerecilelist();viewbottlerecyclelist。bottlerecilelist=new listbottlerecilemodel();//要实例化对象,相当重要//这里是为显示分页数据的功能代码if (list_1!=null){ foreach(list _ 1中的定义变量项){ BottleRecycleModel view Potter ecycle=new BottleRecycleModel();视窗浏览器循环.Id=item .id;视窗浏览器循环.DormitoryNumber=item .dormitorynumberviewpottlerecycle .小瓶号=项目。小瓶号;视窗浏览器循环.大瓶号=物品.大瓶号;视窗浏览器循环.总瓶号=项目.totalBottlennumber视窗浏览器循环.发布时间=项目.出版时间;viewpottlerecilelist。装瓶专家。add(viewpottlerecile);} ViewBag .dormitorybottlerecilesort=viewportlerecilelist。装瓶厂;} else { ViewBag .dormitrybottlerecyclesort=null}查看包包。页数=pbsaccess。getdormitrybottlebegination page count();观景包。页面索引=页面索引;返回视图(视图包);}这里使用视图包进行传值,这里的getdormitrybottlebegination page计数()就是上面页数得出的方法。这是后台的方法。
现在说一下_PaginationComponent.cshtml里该如何运用这些值。
@{字符串控制器=视图上下文。路由数据。值['控制器']。ToString();字符串操作=视图上下文。路由数据。值['操作']。ToString();} lia href=' # '/a/Li @ for(int I=1;I @ viewpag。页数1;I){ lia href='/@控制器/@动作/@ I ' @ I/a/Li } lia href=' # '/a/Li为了进行组件复用,采用视图上下文.路由数据。值['控制器']。ToString()方法,这样,在其他页面里引用组件时,可以轻易移植过去如:a href='/@控制器/@操作/@i'@i/a,当然,实用为循环是为了显示出更多的页数,诸如1、2、3、4等等,这里我的数据比较少,因此只显示一页,当然还有其他功能诸如省略过多页数为省略号和当前页禁用等等,需要射流研究…其他代码来实现,这里只为了实现一个简单的分页组件功能。
这个页面里的代码并非全部分页的源码,这里只提供我个人解决时思路,如果有错误,还请指正,必定虚心求教。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
版权声明:asp.net mvc4 mysql制作简单分页组件(部分视图)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。