oa_mvc_easyui_分页(4)
1.数据层的编写
NewListInfoDal.cs:
GetPageEntityList方法,根据start,end取出数据 --row_number() over()函数查询
LoadEntity方法:初始化,将datatable中的每行添加到对象中
GetRecordCount方法:获取T_news表中,总的条数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using Itcast.CMS.Model; namespace Itcast.CMS.DAL
{
public class NewListInfoDal
{ /// <summary>
/// 用于分页,根据start,end 取出数据
/// </summary>
/// <param name="start"></param>
/// <param name="end"></param>
/// <returns></returns>
public List<T_News> GetPageEntityList(int start,int end)
{
string sql = " select * from (select row_number() over(order by id) as num, * from T_News) as t where t.num>=@start and t.num<=@end ";
SqlParameter[] pars ={
new SqlParameter("@start",SqlDbType.Int),
new SqlParameter("@end",SqlDbType.Int)
};
pars[].Value = start;
pars[].Value = end; DataTable dt = DAL.SqlHelper.SelectSqlReturnDataTable(sql, CommandType.Text, pars); List<T_News> newlist_list = null;
if(dt.Rows.Count>)
{
newlist_list = new List<T_News>();
//遍历每一行添加到集合中
T_News newlist =null;
foreach(DataRow row in dt.Rows)
{
newlist = new T_News();
LoadEntity(row, newlist);
newlist_list.Add(newlist);
}
}
return newlist_list;
} public void LoadEntity(DataRow row,T_News newlist)
{
newlist.Id = Convert.ToInt32(row["id"].ToString());
newlist.Title = row["Title"] != DBNull.Value ? row["Title"].ToString() : string.Empty;
newlist.Msg = row["Msg"] != DBNull.Value ? row["Msg"].ToString() : string.Empty;
newlist.Author = row["Author"] != DBNull.Value ? row["Author"].ToString() : string.Empty;
newlist.ImagePath = row["ImagePath"] != DBNull.Value ? row["ImagePath"].ToString() : string.Empty;
newlist.SubDateTime = Convert.ToDateTime(row["SubDateTime"].ToString());
} /// <summary>
/// 获取T_News表中,总的条数
/// </summary>
/// <returns></returns>
public int GetRecordCount()
{
string sql = " select count(*) from T_News ";
object ob = DAL.SqlHelper.selectSqlReturnObject(sql, CommandType.Text);
ob = ob != DBNull.Value ? ob : string.Empty;
return Convert.ToInt32(ob.ToString());
} }
}
2.业务层的编写
NewListInfoService.cs
GetPageEntityList方法:返回分页每页的数据 --公式计算出当前页和每页的条数
GetPageCount方法:获取总的页数 --总的条数/每页的条数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Itcast.CMS.Model;
using Itcast.CMS.DAL; namespace Itcast.CMS.BLL
{
public class NewListInfoService
{ DAL.NewListInfoDal NewListInfo = new DAL.NewListInfoDal(); /// <summary>
/// 返回每页的数据
/// </summary>
/// <param name="PageIndex">当前页</param>
/// <param name="PageSize">每页的条数</param>
/// <returns></returns>
public List<T_News> GetPageEntityList(int PageIndex,int PageSize)
{
//公式计算每页的第一条,最好一条
int start = (PageIndex - ) * PageSize + ;
int end = PageIndex * PageSize;
return NewListInfo.GetPageEntityList(start, end);
} /// <summary>
/// 获取总的页数
/// </summary>
/// <returns></returns>
public int GetPageCount(int PageSize)
{
int recordCount = NewListInfo.GetRecordCount();
int PageCount = Convert.ToInt32(Math.Ceiling((double)recordCount / PageSize));
return PageCount;
} }
}
3.控制器中的Index方法
{
获取当前页码值,
设置条数,
总的页码数,
PageIndex范围判断,
获取分页数据,
ViewData数据绑定
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Itcast.CMS.Model; namespace Itcast.CMS.WebApp.Controllers
{
public class NewListController : Controller
{
//
// GET: /NewList/
BLL.NewListInfoService NewListInfo = new BLL.NewListInfoService(); public ActionResult Index()
{
//获取当前页码值
int PageIndex = Request["PageIndex"] != null ? Convert.ToInt32(Request["PageIndex"]) : ;
//设置条数
int PageSize = ;
//总的页码数
int PageCount = NewListInfo.GetPageCount(PageSize);
//PageIndex范围判断
PageIndex = PageIndex < ? : PageIndex;
PageIndex = PageIndex > PageCount ? PageCount : PageIndex;
//获取分页数据
List<T_News> list = NewListInfo.GetPageEntityList(PageIndex, PageSize);
//ViewData...
ViewData["newInfoList"] = list;
ViewData["pageIndex"] = PageIndex;
ViewData["pageCount"] = PageCount;
return View();
} }
}
4.生产分页的页码,Common中的PageBar类中的GetPageBar方法 --生产分页的字符
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Itcast.CMS.Common
{
public class PageBar
{
public static string GetPageBar(int pageIndex,int pageCount)
{
if (pageCount == )
{
return string.Empty;
}
int start = pageIndex - ;
start = start < ? : start;
int end = start + ;
if (end > pageCount)
{
end = pageCount;
start = end - > ? end - : ;
}
StringBuilder sb = new StringBuilder();
if (pageIndex > )
{
sb.Append(string.Format("<a href='?PageIndex={0}'>上一页</a>", pageIndex - ));
}
for (int i = start; i <= end; i++)
{
if (i == pageIndex)
{
sb.Append(i);
}
else
{
sb.Append(string.Format("<a href='?PageIndex={0}'>{0}</a>", i));
}
}
if (pageIndex < pageCount)
{
sb.Append(string.Format("<a href='?PageIndex={0}'>下一页</a>", pageIndex + ));
}
return sb.ToString();
}
}
}
5.视图中的调用,Razor引擎视图的编写
@{
Layout = null;
}
@using Itcast.CMS.Model
@using Itcast.CMS.Common <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<link href="~/Content/tableStyle.css" rel="stylesheet" />
<link href="~/Content/pageBar.css" rel="stylesheet" />
</head>
<body>
<div>
@if(ViewData["newInfoList"]!=null)
{
<table width="100%">
<tr><th>编号</th><th>标题</th><th>作者</th><th>时间</th><th>详细</th><th>删除</th></tr>
@foreach(T_News newlist in (List<T_News>)ViewData["newInfoList"])
{
<tr>
<td>@newlist.Id</td>
<td>@newlist.Title</td>
<td>@newlist.Author</td>
<td>@newlist.SubDateTime</td>
<td>详细</td>
<td>删除</td>
</tr>
}
</table>
<div class="page_nav">@MvcHtmlString.Create(PageBar.GetPageBar((int)ViewData["pageIndex"], (int)ViewData["pageCount"]))</div>
}
else
{
<span>暂无数据</span>
}
</div>
</body>
</html>
oa_mvc_easyui_分页(4)的更多相关文章
- 记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题
最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerP ...
- js实现前端分页页码管理
用JS实现前端分页页码管理,可以很美观的区分页码显示(这也是参考大多数网站的分页页码展示),能够有很好的用户体验,这也是有业务需要就写了一下,还是新手,经验不足,欢迎指出批评! 首先先看效果图: 这是 ...
- JdbcTemplate+PageImpl实现多表分页查询
一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...
- MVC如何使用开源分页插件shenniu.pager.js
最近比较忙,前期忙公司手机端接口项目,各种开发+调试+发布现在几乎上线无问题了:虽然公司项目忙不过在期间抽空做了两件个人觉得有意义的事情,一者使用aspnetcore开发了个人线上项目(要说线上其实只 ...
- NET Core-TagHelper实现分页标签
这里将要和大家分享的是学习总结使用TagHelper实现分页标签,之前分享过一篇使用HtmlHelper扩展了一个分页写法地址可以点击这里http://www.cnblogs.com/wangrudo ...
- 套用JQuery EasyUI列表显示数据、分页、查询
声明,本博客从csdn搬到cnblogs博客园了,以前的csdn不再更新,朋友们可以到这儿来找我的文章,更多的文章会发表,谢谢关注! 有时候闲的无聊,看到extjs那么肥大,真想把自己的项目改了,最近 ...
- php实现的分页类
php分页类文件: <?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 pr ...
- C#关于分页显示
---<PS:本人菜鸟,大手子还请高台贵手> 以下是我今天在做分页时所遇到的一个分页显示问题,使用拼写SQL的方式写的,同类型可参考哦~ ------------------------- ...
- JAVA 分页工具类及其使用
Pager.java package pers.kangxu.datautils.common; import java.io.Serializable; import java.util.List; ...
随机推荐
- Linux 多线程按照线程顺序打印字符
#include <stdio.h> #include <pthread.h> #include <unistd.h> ; pthread_mutex_t mute ...
- smarty中ifelse、foreach以及获取数组中键值名的一个实例
<{if empty($history)}> <tr> <td colspan="6">Not any records!</td> ...
- 黑马vue---8-10、v-cloak、v-text、v-html、v-bind、v-on的基本使用
黑马vue---8-10.v-cloak.v-text.v-html.v-bind.v-on的基本使用 一.总结 一句话总结: v-bind等这些东西都是用的vue.data里面的变量 1.使用 v- ...
- 【转】python 输入一个时间,获取这个时间的下一秒
原文:https://blog.csdn.net/l_d_56/article/details/84832198 输入一个时间,获取这个时间的下一秒 PS:下面代码使用于 python 2.7 tim ...
- R语言:读入txt文件中文文本出现乱码解决方案
下载安装 readr 因为使用内置函数 read.table() 读入应该是格式不符合要求会报错 library(readr) help(package="readr") 可以使用 ...
- laravel查询构造器DB还是ORM,这两者有什么区别,各该用在什么场景中
解答一: 我们所有操作都是走的orm,因为操作简单 直观明了 好维护,性能是低一些 但还没有多致命,真有并发需要优化了 用DB也不一定能解决问题.还是要了解orm每个方法的意思,不然你可能一不小心就会 ...
- Hibernate系列1:入门程序
1.传统的java数据库连接 在传统的开发中,如果要建立java程序和数据库的连接,通常采用JDBC或者Apache Commons DbUtils开发包来完成.他们分别有以下特点: JDBC: 优点 ...
- Selenium chromeDriver 下载地址
http://chromedriver.storage.googleapis.com/ http://npm.taobao.org/mirrors/chromedriver/
- Android中IntentService与Service
Android中的Service是用于后台服务的,当应用程序被挂到后台的时候,问了保证应用某些组件仍然可以工作而引入了Service这个概念,那么这里面要强调的是Service不是独立的进程,也不是独 ...
- Windows下Elasticsearch安装问题处理
按ES官网的安装方法正常安装就行了.可能遇到的其他问题. 1.报jvm.dll不存在. 只需要重新安装JDK过后,会有jdk1.8.0_73目录和jre1.8.0_73目录.因为java就喜欢玩这种“ ...