一、前端准备工作

1、之前我写到过《Asp.net中引用AspNetPager.dll进行数据分页》  这种分页方式只能在前台将数据分页,而每次点击查询时对目标数据库还是全查询,这样不仅会消耗数据库资源,还会加长等待时间,所以本文我将介绍如何通过存储过程对数据进行真分页。

2、参考前文将基础搭建完成。

二、分页存储过程。

1、在真分页中,我们要将每一页的数据量,起始行这些发送给后端,后端接收到指令后则按照这个区间进行查询数据,后端数据分页方式在前文中我有详细介绍过。

2、后端分页:SQL Server的两种数据分页方式简析 ,参考此文的分页方式选择合适自己后端分页方法,后面我使用的是存储过程分页-GetPageRecords。

三、页面代码

PS:在AspNetPager.dl开发者官网,也有其它调用方式和用法,大家可以看看有没有新的思路,对于分页控件样式,网上有一些CSS样式可以参考,建议看看,因为原格式实在有些单调。

 <webdiyer:AspNetPager ID="AspNetPager1" runat="server" PageSize="25"
HorizontalAlign="Center" Width="100%"
meta:resourceKey="AspNetPager1" Style="font-size: 14px"
AlwaysShow="false" FirstPageText="首页" LastPageText="尾页" NextPageText="后页"
PrevPageText="前页" SubmitButtonText="Go" SubmitButtonClass="submitBtn"
CustomInfoStyle="font-size:14px;text-align:left;"
InputBoxStyle="width:25px; border:1px solid #999999; text-align:center; "
TextBeforeInputBox="转到第" TextAfterInputBox="页 " TextAfterPageIndexBox="页"
TextBeforePageIndexBox="转到" Font-Size="14px" CustomInfoHTML="共有%RecordCount%条记录,共%PageCount%页,每页%PageSize%行"
ShowCustomInfoSection="Left" CustomInfoSectionWidth="30%"
CssClass="paginator"
PagingButtonSpacing="3px" OnPageChanged="AspNetPager1_PageChanged" ShowBoxThreshold="25">
</webdiyer:AspNetPager

常用自定义项:PageSize:页面显示的行数;

CustomInfoHTML:自定义项(这里可以任意新增删除)

四、后台代码

PS:本文中的代码是从我的测试项目中扣出来的,可根据自己的项目灵活应用,如果有更好的方式和思路欢迎留言。

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)//判断是否回发
{
RowDatasBind();//调用函数
}
}
//拼接页面查询条件
public string Search()
{
string SQL = "select PCB_CODE,WORK_ORDER_CODE,PRODUCTION_ORDER_ID,TEST_CODE,PLANT_CODE,CREATE_TIME,DEVICE_NO,(case CONCLUSION when 0 then '通过' when 1 then '不通过' else '其他' end) CONCLUSION from [dbo].[T_Aoi_TEST] WITH (NOLOCK) where 1=1";
if (!string.IsNullOrEmpty(txtWORK_ORDER_CODE.Text))
{
SQL = SQL + " and WORK_ORDER_CODE like'" + "%" + txtWORK_ORDER_CODE.Text.Trim() + "%" + "'";
}
if (!string.IsNullOrEmpty(txtPCB_CODE.Text))
{
SQL = SQL + " and PCB_CODE like'" + "%" + txtPCB_CODE.Text.Trim() + "%" + "'";
}
if (!string.IsNullOrEmpty(txtPRODUCTION_ORDER_ID.Text))
{
SQL = SQL + " and PRODUCTION_ORDER_ID like'" + "%" + txtPRODUCTION_ORDER_ID.Text.Trim() + "%" + "'";
}
if (!string.IsNullOrEmpty(txtBeginTime.Text) && !string.IsNullOrEmpty(txtEndTime.Text))
{
SQL = SQL + " and CHECK_TIME>='" + txtBeginTime.Text + "'" + " and CHECK_TIME<='" + txtEndTime.Text + "'";
}
if (ddlCon.Text != "9")
{
SQL = SQL + " and CONCLUSION ='" + ddlCon.Text + "'";
}
//按创建时间倒序查询
SQL = SQL + "order by CREATE_TIME desc";
return SQL;
} //服务器端数据分页
private void RowDatasBind()
{
string SearchConditions = "1=1";//搜索条件
string SQLgetcount = "select count(1) from T_Aoi_TEST where 1=1"; if (!string.IsNullOrEmpty(txtWORK_ORDER_CODE.Text))
{
SearchConditions = SearchConditions + " and WORK_ORDER_CODE like''" + "%" + txtWORK_ORDER_CODE.Text.Trim() + "%" + "''";
SQLgetcount = SQLgetcount + " and WORK_ORDER_CODE like'" + "%" + txtWORK_ORDER_CODE.Text.Trim() + "%" + "'";
}
if (!string.IsNullOrEmpty(txtPCB_CODE.Text))
{
SearchConditions = SearchConditions + " and PCB_CODE like''" + "%" + txtPCB_CODE.Text.Trim() + "%" + "''";
SQLgetcount = SQLgetcount + " and PCB_CODE like'" + "%" + txtPCB_CODE.Text.Trim() + "%" + "'";
}
if (!string.IsNullOrEmpty(txtPRODUCTION_ORDER_ID.Text))
{
SearchConditions = SearchConditions + " and PRODUCTION_ORDER_ID like''" + "%" + txtPRODUCTION_ORDER_ID.Text.Trim() + "%" + "''";
SQLgetcount = SQLgetcount + " and PRODUCTION_ORDER_ID like'" + "%" + txtPRODUCTION_ORDER_ID.Text.Trim() + "%" + "'";
}
if (!string.IsNullOrEmpty(txtBeginTime.Text) && !string.IsNullOrEmpty(txtEndTime.Text))
{
SearchConditions = SearchConditions + " and CHECK_TIME>=''" + txtBeginTime.Text + "''" + " and CHECK_TIME<=''" + txtEndTime.Text + "''";
SQLgetcount = SQLgetcount + " and CHECK_TIME>='" + txtBeginTime.Text + "'" + " and CHECK_TIME<='" + txtEndTime.Text + "'";
}
if (ddlCon.Text != "9")
{
SearchConditions = SearchConditions + " and CONCLUSION =''" + ddlCon.Text + "''";
SQLgetcount = SQLgetcount + " and CONCLUSION ='" + ddlCon.Text + "'";
} int StartRow = (AspNetPager1.CurrentPageIndex * AspNetPager1.PageSize) - AspNetPager1.PageSize;//计算起始行
string SQLGetPage = "EXEC [Common_GetPageRecords] @StartRow=" + StartRow + ",@MaxRows = " + AspNetPager1.PageSize + ",@TableName = N'T_Aoi_TEST',@PrimaryKey = N'TEST_CODE',@GetFields = N'PCB_CODE,WORK_ORDER_CODE,PRODUCTION_ORDER_ID,TEST_CODE,PLANT_CODE,CREATE_TIME,DEVICE_NO,(case CONCLUSION when 0 then ''通过'' when 1 then ''不通过'' else ''其他'' end) CONCLUSION',@SearchConditions ='" + SearchConditions + "',@SortExpression = N'TEST_CODE desc'"; //计算总行数
DataSet dss = DBHelper.GetDataSetMis(SQLgetcount);
DataTable fileNameDt = dss.Tables[0];
this.AspNetPager1.RecordCount = Convert.ToInt32(fileNameDt.Rows[0][0].ToString());//总行数
//分页后数据填充
DataSet ds = DBHelper.GetDataSetMis(SQLGetPage);
PagedDataSource pds = new PagedDataSource();
pds.AllowPaging = true;//是否开启分页
pds.AllowServerPaging = true;//是否开启服务器端分页
pds.CurrentPageIndex = AspNetPager1.CurrentPageIndex;//当前页的页码
pds.PageSize = AspNetPager1.PageSize;//每页显示的行数
int aaa = ds.DefaultViewManager.DataSet.Tables.Count;
if (ds.DefaultViewManager.DataSet.Tables.Count == 0)//修复当查询结果为空时“无法找到表 0。”的错误
{
pds.DataSource = null;
}
else
{
pds.DataSource = ds.Tables[0].DefaultView;
if (ds.Tables[0].Rows.Count != AspNetPager1.PageSize)//修复最后一页因为剩余尾数和页数不对应出现索引错误的问题
{
pds.PageSize = ds.Tables[0].Rows.Count;
}
}
this.GridView1.DataSource = pds;
this.GridView1.DataBind();
}
/// <summary>
/// 绑定数据到分页控件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void AspNetPager1_PageChanged(object sender, EventArgs e)
{
RowDatasBind();
}
/// <summary>
/// 条件查询
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnQuery_Click(object sender, EventArgs e)
{
RowDatasBind();
}

五、总结

到这里真假分页以及分页存储过程都已经完成了,页面加载时再也不用漫长的等待。如果你有更好方法建议欢迎吐槽、留言~

ASP.NET真分页_接前篇引用AspNetPager.dll进行数据分页的更多相关文章

  1. ASP.NET CORE MVC 2.0 项目中引用第三方DLL报错的解决办法 - InvalidOperationException: Cannot find compilation library location for package

    目前在学习ASP.NET CORE MVC中,今天看到微软在ASP.NET CORE MVC 2.0中又恢复了允许开发人员引用第三方DLL程序集的功能,感到甚是高兴!于是我急忙写了个Demo想试试,我 ...

  2. ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第四篇:传递表单数据

    摘要      本文将完成我们“MVC公告发布系统”的公告发布功能,以此展示在ASP.NET MVC中如何传递处理表单的数据. 前言      通过前几篇文章,我们已经能比较自如的使用ASP.NET ...

  3. salesforce 零基础开发入门学习(八)数据分页简单制作

    本篇介绍通过使用VF自带标签和Apex实现简单的数据翻页功能. 代码上来之前首先简单介绍一下本篇用到的主要知识: 1.ApexPages命名空间 此命名空间下的类用于VF的控制. 主要的类包括但不限于 ...

  4. OSG学习:LOD、数据分页、动态调度

    LOD(level of detail):是指根据物体模型的结点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算.在OSG的场景结点组织结 ...

  5. ASP.NET自定义控件组件开发 第三章 为控件添加事件 前篇

    原文:ASP.NET自定义控件组件开发 第三章 为控件添加事件 前篇 第三章 为控件添加事件 好了,我们之前以前开发一个控件.而且也添加了属性,开发也很规范,但是那个控件还差最后一点:添加事件. 系列 ...

  6. 【原创】构建高性能ASP.NET站点 第六章—性能瓶颈诊断与初步调优(下前篇)—简单的优化措施

    原文:[原创]构建高性能ASP.NET站点 第六章-性能瓶颈诊断与初步调优(下前篇)-简单的优化措施 构建高性能ASP.NET站点 第六章—性能瓶颈诊断与初步调优(下前篇)—简单的优化措施 前言:本篇 ...

  7. [后端人员耍前端系列]KnockoutJs篇:使用KnockoutJs+Bootstrap实现分页

    一.引言 由于最近公司的系统需要改版,改版的新系统我打算使用KnockoutJs来制作Web前端.在做的过程中,遇到一个问题——如何使用KnockoutJs来完成分页的功能.在前一篇文章中并没有介绍使 ...

  8. ASP.NET MVC 数据分页

    作为一个菜鸟级的程序猿,总结一下学到的两种数据分页. 1.真分页 真分页就是需要时从数据库里读出需要多的数据,利用存储过程可实现.网上的分页SQL特别多,数据库自带的一些方法也可方便的帮助分页,但是我 ...

  9. VS2010+MVC4+Spring.NET2+NHibernate4-传统三层架构-前篇

    VS2010+MVC4+Spring.NET2+NHibernate4 - 传统三层架构 - 前篇 一直追求使用开源项目,就因一个字:懒! 一直想整理一下的,却一直懒到现在!从当初用的MVC3到现在的 ...

随机推荐

  1. 高德纳/Donald Ervin Knuth

    丸了丸了这位就是我人生的第一位爱豆了owo 感觉他的经历,气质都是我期望的类型呀. 即使没有人家的智商和绝顶天赋,也不断向彼努力吧. 从小喜欢音乐,会多种乐器(管风琴) 其实长得人高马大,高中校篮球队 ...

  2. informix错误代码小结

    informix错误代码小结 所有错误可以用finderr+错误代码查到,英文的,这里中文注释便于理解. -100 错误的描述:C-ISAM错误:向具有唯一索引的字段加入一个重复值.  系统的操作:该 ...

  3. 深入刨析tomcat 之---第8篇 how tomcat works 第11章 11.9应用程序,自定义Filter,及注册

    writed by 张艳涛, 标签:全网独一份, 自定义一个Filter 起因:在学习深入刨析tomcat的学习中,第11章,说了调用过滤链的原理,但没有给出实例来,自己经过分析,给出来了一个Filt ...

  4. 15 道超经典大厂 Java 面试题!重中之重

    从超高频的后端面试题出发,指明学习方向 大家好,我是鱼皮. 还记得我的老弟小阿巴么?他目前正值大一暑假,在家自学编程(刷短视频)中. 他整个大一期间基本都在学习前端.后来,我带他写了一次后端,结果就崩 ...

  5. SQL语句(一)基础查询与过滤数据

    目录 一.数据库测试表 二.基础查询 1. 获得需要的记录的特定字段 2. 查询常量值 3. 查询表达式 4. 查询函数 5. 起别名 6. 去重 7. CONCAT函数的简单使用 三.过滤数据 大纲 ...

  6. Kali中John的使用方法

    John是一个破解系统密码的工具. 参数 John the Ripper 1.9.0-jumbo-1 OMP [linux-gnu 64-bit x86_64 AVX AC] Copyright (c ...

  7. java数据类型和类型得转换

    java数据类型 强类型语言 ​ Java是一种强类型得语言,严格要求变量要符合规定,所有变量都必须先定义再使用 java得数据类型分为两大类 值得注意得是String并不是一个数据类型,它是一个类 ...

  8. myvimrc

    set nocompatible execute pathogen#infect() call pathogen#helptags() call pathogen#incubate() imap jk ...

  9. 玩转 pyocd

    (一) pyocd (1) 什么是pyocd ​ pyocd 是 arm 开发的一个 python 包(python package),该软件包可以使用多种USB调试器对 arm cortex-M 微 ...

  10. JavaWeb单体项目的分层设计与实现

    1.概述 为什么要把一个完整的项目(Project)按层拆分成多个模块(Module)? 1)使项目层次更加的清晰: 2)提高代码的复用性: 3)细化分工: 4)解耦. 是不是听起来很高大尚,今天就简 ...