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; ...
随机推荐
- 在ubuntu16.04-32bits 下编译vlc和vlc-qt开源项目
软件版本: Ubuntu14.04 32位 Qt5.4.0 32位 开源项目: vlc2.2.4: wget http://download.videolan.org/pub/v ...
- Button.OnClientClick
Button.OnClientClick Gets or sets the client-side script that executes when a Button control's Click ...
- LC 890. Find and Replace Pattern
You have a list of words and a pattern, and you want to know which words in words matches the patter ...
- Jeecg页面标签规则
1.表单字段重复校验方法 <input name="departname" class="inputxt" value="${depart.de ...
- Unix介绍
1965年,AT&T贝尔电话实验室.通用电气公司.麻省理工学院MAC课题组一起联合开发一个称为Multics的新操作系统.该项目目的是让大型主机可以同时提供300台以上的终端机连接使用.其被设 ...
- AndroidManifest.xml中的<uses-feature>以及和<uses-permission>之间的联系
概述:<uses-feature>用来声明应用中需要用的硬件和软件的功能. 硬件特性:表明您的应用需要用的硬件功能. 功能类型 特征描述 描述 音频 android.hardware.au ...
- 爬虫 lxml 模块
Xpath 在 XML 文档中查找信息的语言, 同样适用于 HTML 辅助工具 Xpath Helper Chrome插件 快捷键 Ctrl + shift + x XML Quire xpath ...
- 【VBA】学习中出现的错误
1.自定义函数 自定义函数尽量不要使用,容易导致excel卡,让你怀疑人生!!!
- Ceph RBD 的实现原理与常规操作
目录 文章目录 目录 前文列表 RBD RBD Pool 的创建与删除 块设备的创建与删除 块设备的挂载与卸载 新建客户端 块设备的扩缩容 RBD 块设备的 Format 1 VS Format 2 ...
- Field in required a single bean, but 2 were found:
我在其他类注入的时候出现以下错误 @Autowired NodeAgentService nodeAgentService; 异常 Description: Field mibService in c ...