这里有新鲜出炉的 Mysql 教程, 程序狗速度看过来!
Mysql 关系型数据库管理系统
MySQL 是一个开放源码的小型关联式数据库管理系统, 开发者为瑞典 MySQL AB 公司 MySQL 被广泛地应用在 Internet 上的中小型网站中由于其体积小速度快总体拥有成本低, 尤其是开放源码这一特点, 许多中小型网站为了降低网站总体拥有成本而选择了 MySQL 作为网站数据库
这篇文章主要介绍了 asp.net mvc4 mysql 制作简单分页组件, 附部分视图, 具有一定的参考价值, 感兴趣的小伙伴们可以参考一下
在开始做 mysql 分页功能组件前, 便设定的是要有一定可复用性先在项目里 Views 文件夹下右键新建名为_PaginationComponent.cshtml, 这里 html 及 CSS 我采用的 bootstrap 分页组件, 这可以参考 http://v3.bootcss.com/components/
先将生成项目效果截图呈上:
这里有需要预先知道的, 是 mysql 分页查询与 mssql 分页查询实现不同点在于, mysql 支持 limit 语句, limit 格式为 limit pageIndex*pageSize,pageSize,pageIndex-- 为页数, pageSize-- 为页面包含数据量 limit 具体用法可查询 mysql 手册然后需要预先定义好 pageSize,pageIndex,pageCount(分页总数) 三个量这里预设 pageSize 为 30, 即: int pageSize = 30
首先来实现获取 pageCount: 思路是, 先将要获取的所有数据集从数据库中取出, 根据 pageSize = 30 得出总页数, 这里会遇到数据集数量为 30 的倍数与否问题, 解决是:
- MySqlCommand comm_1 = new MySqlCommand(sqlSearch, connection);
- MySqlDataAdapter da_1 = new MySqlDataAdapter(sqlSearch, connection);
- da_1.SelectCommand = comm_1; // 初始化 da.fill 的命令
- DataSet set_1 = new DataSet();
- da_1.Fill(set_1);
- DataTable dt_1 = set_1.Tables[0]; // 使用 datatable 装所得多张表数据, 并获取里面的第一张表
- Count = (double)(dt_1.Rows.Count) / 30;// 分页总页数
- if (Count > (int)(dt_1.Rows.Count) / 30)
- {
- pageCount = (dt_1.Rows.Count) / 30 + 1;
- }
- else if (Count == (dt_1.Rows.Count) / 30)
- {
- pageCount = (dt_1.Rows.Count) / 30;
- }
- else if (Count < (int)(dt_1.Rows.Count) / 30)
- {
- pageCount = 1;
- }
这里用到判断, 大于 30 的 pageCount 均往上加 1, 小于 30 的 pageCount 为 1
接下来要实现的是用 pageIndex 传页数获取对应的数据集, 思路是利用 limit 语句特性:
- public List<Model> GetDormitoryBottleRecycleListPagination(int pageIndex, int pageSize)
- {
- Get_Connection();
- List<Model> list = null;string sqlPaginatioSearch = "SELECT * FROM table ORDER BY file_1 ASC LIMIT" + (pageIndex - 1) * 30 + "," + pageSize + ""; // 填充分页后的数据
- MySqlCommand comm_2 = new MySqlCommand(sqlPaginatioSearch, connection);
- MySqlDataAdapter da_2 = new MySqlDataAdapter(sqlPaginatioSearch, connection);
- da_2.SelectCommand = comm_2; // 初始化 da.fill 的命令
- DataSet set_2 = new DataSet();
- da_2.Fill(set_2);
- DataTable dt_2 = set_2.Tables[0]; // 使用 datatable 装所得多张表数据, 并获取里面的第一张表
- if (dt_2 != null && dt_2.Rows.Count > 0)
- {
- list = new List<Model>();
- foreach (DataRow row in dt_2.Rows)
- {
- Model entity = sqlhelper.CreateItem(row);
- list.Add(entity);
- }
- }
- Close_Connection();
- return list;
- }
- string sqlPaginatioSearch = "SELECT * FROM table ORDER BY file_1 ASC LIMIT" + (pageIndex - 1) * 30 + "," + pageSize + ""; // 填充分页后的数据
这是核心 sql 语句, 通过 pageIndex 传入页面数, 从 (pageIndex - 1) * 30 处开始取 pageSize 量的数据
在控制器的 action 中实现也是关键:
- public ActionResult DormitoryBottleRecycleSort(int id = 1)
- {
- int pageIndex = id;// 传递分页数
- int pageSize = 30;
- int pageCount = 0;
- List<BottleRecycleModel> list_1;
- list_1 = pbsAccess.GetDormitoryBottleRecycleListPagination(pageIndex, pageSize, pageCount);// 获取分页列表
- ViewBag.ListCount = list_1.Count;
- BottleRecycleList viewBottleRecycleList = new BottleRecycleList();
- viewBottleRecycleList.bottleRecycleList = new List<BottleRecycleModel>();// 要实例化对象, 相当重要
- // 这里是为显示分页数据的功能代码
- if (list_1 != null)
- {
- foreach (var item in list_1)
- {
- BottleRecycleModel viewBottleRecycle = new BottleRecycleModel();
- viewBottleRecycle.Id = item.Id;
- viewBottleRecycle.DormitoryNumber = item.DormitoryNumber;
- viewBottleRecycle.SmallBottleNumber = item.SmallBottleNumber;
- viewBottleRecycle.BigBottleNumber = item.BigBottleNumber;
- viewBottleRecycle.TotalBottleNumber = item.TotalBottleNumber;
- viewBottleRecycle.PublishTime = item.PublishTime;
- viewBottleRecycleList.bottleRecycleList.Add(viewBottleRecycle);
- }
- ViewBag.DormitoryBottleRecycleSort = viewBottleRecycleList.bottleRecycleList;
- }
- else
- {
- ViewBag.DormitoryBottleRecycleSort = null;
- }
- ViewBag.pageCount = pbsAccess.getDormitoryBottlePaginationPageCount();
- ViewBag.pageIndex = pageIndex;
- return View(ViewBag);
- }
这里使用 ViewBag 进行传值, 这里的 getDormitoryBottlePaginationPageCount() 就是上面 pageCount 得出的方法这是后台的方法
现在说一下_PaginationComponent.cshtml 里该如何运用这些值
- @{
- string Controllers = ViewContext.RouteData.Values["controller"].ToString();
- string Actions = ViewContext.RouteData.Values["Action"].ToString();
- }
- <li><a href="#">«</a></li>
- @for (int i = 1; i < @ViewBag.pageCount + 1; i++)
- {
- <li><a href="/@Controllers/@Actions/@i">@i</a></li>
- }
- <li><a href="#">»</a></li>
为了进行组件复用, 采用 ViewContext.RouteData.Values["controller"].ToString() 方法, 这样, 在其他页面里引用组件时, 可以轻易移植过去如:<a href="/@Controllers/@Actions/@i">@i</a>, 当然, 实用 for 循环是为了显示出更多的页数, 诸如 1234 等等, 这里我的数据比较少, 因此只显示一页, 当然还有其他功能诸如省略过多页数为省略号和当前页禁用等等, 需要 js 其他代码来实现, 这里只为了实现一个简单的分页组件功能
这个页面里的代码并非全部分页的源码, 这里只提供我个人解决时思路, 如果有错误, 还请指正, 必定虚心求教
来源: http://www.phperz.com/article/18/0223/352463.html