解决分页这个问题搞了一天半,耗时巨大,现在总结一下。

通常分页有3种方法,分别是asp.net自带的数据显示空间如GridView等自带的分页,第三方分页控件如aspnetpager,存储过程分页等。这里分别做总结。

第一种:使用GridView自带分页,这种是最简单的分页方法。

前台的方法:

<asp:GridView ID="GridView1" AllowPaging="true" runat="server" 
            onpageindexchanging="GridView1_PageIndexChanging" PageSize="3"> 
        </asp:GridView>

后台方法:

代码

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using JXSoft.TicketManage.Model; 
using JXSoft.TicketManage.BLL; 
using System.Text.RegularExpressions; 
using System.Data;

namespace JXSoft.TicketManage.Web 

    public partial class Test : System.Web.UI.Page 
    { 
        protected void Page_Load(object sender, EventArgs e) 
        { 
            if(!IsPostBack) 
            { 
                BindData(); 
            } 
        }

protected void BindData() 
        { 
            DataTable dt=new DataTable(); 
            dt.Columns.Add("ID"); 
            dt.Columns.Add("Name"); 
            for (int i = 0; i < 10;i++ ) 
            { 
                dt.Rows.Add(i.ToString(), i.ToString()); 
            } 
            this.GridView1.DataSource = dt; 
            this.GridView1.DataBind(); 
        } 
        protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
        { 
            this.GridView1.PageIndex = e.NewPageIndex; 
            BindData(); 
        } 
    } 
}

第二种:使用个性化显示的AspNetPager.dll进行分页

此处需要添加aspnetpager.dll的引用

前台:

代码

<form id="form1" runat="server"> 
<div> 
    <asp:GridView ID="GridView1"   runat="server"  > 
    </asp:GridView> 
<webdiyer:AspNetPager ID="AspNetPager1" runat="server"  
    CustomInfoHTML="第%CurrentPageIndex%页,共%PageCount%页,每页%PageSize%条"  
    FirstPageText="首页" LastPageText="尾页" LayoutType="Table" NextPageText="下一页"  
    onpagechanging="AspNetPager1_PageChanging" PageIndexBoxType="DropDownList"  
    PagingButtonLayoutType="Span" PrevPageText="上一页" ShowCustomInfoSection="Left"  
    ShowPageIndexBox="Always" SubmitButtonText="Go" PageSize="4" TextAfterPageIndexBox="页"  
    TextBeforePageIndexBox="转到"> 
</webdiyer:AspNetPager> 
</div> 
</form>

后台:

代码

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using JXSoft.TicketManage.Model; 
using JXSoft.TicketManage.BLL; 
using System.Text.RegularExpressions; 
using System.Data;

namespace JXSoft.TicketManage.Web 

    public partial class Test : System.Web.UI.Page 
    { 
        protected void Page_Load(object sender, EventArgs e) 
        { 
            if(!IsPostBack) 
            { 
                BindData(); 
            } 
        }

protected void BindData() 
        { 
            DataTable dt=new DataTable(); 
            dt.Columns.Add("ID"); 
            dt.Columns.Add("Name"); 
            for (int i = 0; i < 10;i++ ) 
            { 
                dt.Rows.Add(i.ToString(), i.ToString()); 
            } 
            DataSet ds = new DataSet(); 
            ds.Tables.Add(dt);

Pager(this.GridView1, this.AspNetPager1, ds); 
        }

protected void Pager(GridView dl, Wuqi.Webdiyer.AspNetPager anp, System.Data.DataSet dst) 
        { 
            PagedDataSource pds = new PagedDataSource(); 
            pds.DataSource = dst.Tables[0].DefaultView; 
            pds.AllowPaging = true;

anp.RecordCount = dst.Tables[0].DefaultView.Count; 
            pds.CurrentPageIndex = anp.CurrentPageIndex - 1; 
            pds.PageSize = anp.PageSize;

dl.DataSource = pds; 
            dl.DataBind(); 
        }

protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e) 
        { 
            AspNetPager1.CurrentPageIndex = e.NewPageIndex; 
            BindData(); 
        } 
    } 
}

第三种:使用AspNetPager结合存储过程进行分页

这种方法分页稍微复杂一些,但是可以应付比较大的数据量。

前台:

代码

<asp:GridView ID="GridView1" runat="server" CssClass="GridTable" AutoGenerateColumns="false" onrowdatabound="GridView1_RowDataBound"  > 
        </asp:GridView> 
        <webdiyer:AspNetPager ID="AspNetPager1" runat="server"  
        CustomInfoHTML="第%CurrentPageIndex%页,共%PageCount%页,每页%PageSize%条"  
        FirstPageText="首页" LastPageText="尾页" LayoutType="Table" NextPageText="下一页"  
        onpagechanged="AspNetPager1_PageChanged" PageIndexBoxType="DropDownList"  
        PagingButtonLayoutType="Span" PrevPageText="上一页" ShowCustomInfoSection="Left"  
        ShowPageIndexBox="Always" SubmitButtonText="Go" PageSize="4" TextAfterPageIndexBox="页"  
        TextBeforePageIndexBox="转到"> 
    </webdiyer:AspNetPager>

后台:

代码

//绑定方法中需要传递aspnetpager的两个属性

protected void DataBind(){

DataSet ds = reportQueryBLL.GetTcikDetailReport(this.txtStartDate.Text,this.txtEndDate.Text,int.Parse( this.DropDownListPartment1.SelectedValue),

this.txtPayPerson1.Text,this.txtTicketNum.Text,this.txtTicketNo.Text,

AspNetPager1.StartRecordIndex,AspNetPager1.EndRecordIndex);//注意最后两个参数是aspnetpager的属性。

this.GridView1.DataSource = ds; 
this.GridView1.DataBind();

}

//分页控件的页索引变化事件

protected void AspNetPager1_PageChanged(object src, EventArgs e) 
        { 
            BindDetailReportToGv(); 
        }

//page_base中需要加载首次的数据条数

DataSet ds = reportQueryBLL.GetDetail(this.txtStartDate.Text, this.txtEndDate.Text, int.Parse(this.DropDownListPartment1.SelectedValue), this.txtPayPerson1.Text, this.txtTicketNum.Text, this.txtTicketNo.Text); 
                this.AspNetPager1.RecordCount = ds.Tables[0].Rows.Count; 
                BindDetailReportToGv();

这里用的存储过程比较复杂,因为SQL语句没有能够放到视图中,也无法直接从表中查出结果,这个存储过程有点变态,如果有朋友看到了,希望能指点一下。

其实存储过程的核心在于:

代码

Create PROCEDURE [dbo].[P_GetPagedOrders2005] 
(@startIndex INT,  
@endindex INT 

AS 
select * from (SELECT ROW_NUMBER() OVER(ORDER BY IPid DESC) AS rownum, 
[IPid],[IPFrom],[IPTo],[IPLocation],[IPCity],[IPToNumber],[IPFromNumber] from IPInfo) as U 
WHERE rownum between @startIndex and @endIndex 
GO

代码

--下方可以忽略

--我用到的是存储过程:

set ANSI_NULLS ON 
set QUOTED_IDENTIFIER ON 
go

create PROCEDURE [dbo].[pro_pager] 
(@startIndex INT, 
@endindex INT, 
@strwhere varchar(200) 

AS

SELECT  tb_On_Tick_Info.On_Tick_ID_Int,tb_On_Tick_Info.On_Tick_SellDatetime_Dtm,tb_On_Tick_Info.On_Tick_TicketsNum_Str,  tb_Department_Info.Dept_Name_Str,  tb_User_Info.User_Name_Str,  
  tb_On_Tick_Info.On_Tick_SellNumber_Str,  tb_On_Tick_Info.On_Tick_ShouldPay_Dec,  tb_On_Tick_Info.On_Tick_Count_Int,  
  tb_On_Tick_Info.On_Tick_Discount_Dec, tb_On_Tick_Details.On_Tick_Details_StartNo_Int, CHARINDEX(N'a',  
  tb_On_Tick_Info.On_Tick_Note_Text) AS Expr3, tb_User_Info_1.User_Name_Str AS Expr1,  tb_Ticket_Type.TicketType_Name_Dec,  
COUNT( tb_On_Tick_Details.On_Tick_Details_ID_Int) AS Expr2 ,tb_Department_Info.Dept_ID_Int 
into #temp 
FROM tb_User_Info INNER JOIN 
  tb_On_Tick_Info ON  tb_User_Info.User_ID_Int =  tb_On_Tick_Info.On_Tick_SellPerson_Int INNER JOIN 
  tb_Department_Info ON  tb_User_Info.User_DepartID_Int =  tb_Department_Info.Dept_ID_Int INNER JOIN 
  tb_User_Info AS tb_User_Info_1 ON  tb_On_Tick_Info.On_Tick_PayPerson_Int = tb_User_Info_1.User_ID_Int INNER JOIN 
  tb_On_Tick_Details ON  tb_On_Tick_Info.On_Tick_SellNumber_Str =  tb_On_Tick_Details.On_Tick_SellNumber_Str INNER JOIN 
  tb_Ticket_Type ON  tb_On_Tick_Details.On_Tick_Details_TicketsType_Int =  tb_Ticket_Type.TicketType_ID_Int  
where 1=1 +@strwhere 
GROUP BY  tb_On_Tick_Info.On_Tick_SellDatetime_Dtm,tb_On_Tick_Info.On_Tick_TicketsNum_Str,  tb_Department_Info.Dept_Name_Str,  tb_User_Info.User_Name_Str,  
   tb_On_Tick_Info.On_Tick_SellNumber_Str,  tb_On_Tick_Info.On_Tick_ShouldPay_Dec,  tb_On_Tick_Info.On_Tick_Count_Int,  
   tb_On_Tick_Info.On_Tick_Discount_Dec, CHARINDEX(N'a',  tb_On_Tick_Info.On_Tick_Note_Text), tb_User_Info_1.User_Name_Str,  
   tb_Ticket_Type.TicketType_Name_Dec,  tb_On_Tick_Details.On_Tick_Details_StartNo_Int ,tb_Department_Info.Dept_ID_Int,tb_On_Tick_Info.On_Tick_ID_Int

declare @sql varchar(8000) 
set @sql = 'select  CONVERT(varchar(12) , On_Tick_SellDatetime_Dtm, 111 ) as On_Tick_SellDatetime_Dtm,Dept_Name_Str,User_Name_Str,On_Tick_SellNumber_Str,convert(varchar(15), On_Tick_ShouldPay_Dec) as On_Tick_ShouldPay_Dec,On_Tick_Count_Int,On_Tick_Discount_Dec' 
select @sql=@sql+',sum(case tickettype_name_dec when '''+tickettype_name_dec+''' then expr2 else 0 end) ['+tickettype_name_dec+']' 
from (select distinct tickettype_name_dec from tb_Ticket_Type ) as a 
set @sql=@sql+' ,expr3,Expr1,On_Tick_TicketsNum_Str,Dept_ID_Int,On_Tick_ID_Int into ##t from #temp  
group by  On_Tick_SellDatetime_Dtm,Dept_Name_Str,On_Tick_TicketsNum_Str,User_Name_Str,On_Tick_SellNumber_Str,On_Tick_ShouldPay_Dec,On_Tick_Count_Int, 
On_Tick_Discount_Dec ,expr3,Expr1,Dept_ID_Int,On_Tick_ID_Int order by On_Tick_SellDatetime_Dtm ' 
exec( @sql )

--select * from ##t

select * from (SELECT ROW_NUMBER() OVER(ORDER BY on_tick_id_int DESC) AS rownum, 
* from ##t) as U 
WHERE rownum between @startIndex and @endIndex

drop table ##t

Asp.Net中的三种分页方式总结相关推荐

  1. oracle分页的三种方式,oracle 使用rownum的三种分页方式

    rownum是Oracle数据库中的一个特有关键字,返回的是一个数字代表记录的行号. 基础知识:rownum只能做 获取51到100的数据 三种分页的写法: 1.使用minus,原理就是查询出前100 ...

  2. python请输入_python中的三种输入方式

    python中的三种输入方式 python2.X python2.x中以下三个函数都支持: raw_input() input() sys.stdin.readline() raw_input( )将 ...

  3. mybatis 中 Example 的使用 :条件查询、排序、分页(三种分页方式 : RowBounds、PageHelpler 、limit )

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. import tk.mybatis.mapper.entity.Example;import com ...

  4. oracle中rownum的三种分页方式

    三种分页的写法: 1.使用minus,原理就是查询出前100行的数据 减去 查询出前50行的数据 1 2 3 select * from DATA_TABLE_SQL where rownum< ...

  5. selenium中的三种等待方式以及显示等待和隐式等待区别

    selenium的三种等待方式 selenium中一般分为三种等待方式:显示等待.隐式等待.sleep强制等待 1.显示等待(有条件) 程序提前指定等待条件和等待时间,在查找元素时,判断规定时间内是否 ...

  6. asp.net Session在web.config中的三种配置方式——详解

    这段代码就是设置session在web.config中的存储方式. < sessionState mode="Off|InProc|StateServer|SQLServer" ...

  7. Selenium中的三种等待方式

    在写ui自动化的脚本过程中,如果没有加入等待方式,网络不好的时候通常页面元素没有加载出来,脚本就执行操作定位了,很容易找不到元素,这时候,脚本就会出现异常,还有一种页面是异步加载的,也需要用到等待方式 ...

  8. 【转】-【Python】- 【selenium】 -selenium中的三种等待方式(显示等待WebDriverWait()、隐式等待implicitly()、强制等待sleep())

    -- 学习Python自动化测试的菜鸡,现在是selenium库webdriver的学习时间 [问题] 在获取页面元素的文本的时候,总是获取不到,或者显示为空: [分析] 页面加载不完全: [解决措施 ...

  9. 简单阐述下OC中UIImage三种创建方式~~~

    一. 直接使用imageNamed进行创建 1 UIImage * image = [UIImage imageNamed:@"1.jpg"]; 简单说一下这种方式的优缺点: 优点 ...

  10. ASP.net中的几种分页方法

    1.利用DataGrid内置的分页功能   在DataGrid控件的属性里加入以下语句 AllowPaging="True" PageSize="5" Page ...

最新文章

  1. python3.7.2教程-python 3.7极速入门教程2 Hello与变量
  2. python跑酷游戏源码_Phaser.js实现简单的跑酷游戏附源码下载
  3. 将NGINX Plus配置为Web服务器
  4. 高通在物联网领域已经深耕多年
  5. jquery_file_upload in Rails(ajax实现多张图片上传)
  6. AD转换原理与方案设计(包含原理图、PCB和BOM表)
  7. Wordpress出现503 Service Temporarily Unavailable
  8. 七年级计算机会考重点知识点总结,2021年度七年级科学会考知识点整理.doc
  9. anti-fraud-admin  反欺诈后台
  10. 【R语言】他说每个生存曲线一定要看到p值,不能0.05,0.01,0.001
  11. 【图像处理算法常用数据集】整理第二弹
  12. 压缩文件zip怎么查看注释呢,市场上一些破软件不好用啊,我有秘诀
  13. 专业程序员开发-老狼孩插件懒人精灵版
  14. ImportError: cannot import name '_validate_leng问题解决
  15. 上海市高校计算机等级(一级)考试成绩查询,上海市高校计算机等级考试(一级).doc...
  16. 比赛经验总结--187
  17. Android Studio 1.5.1最新版下载地址
  18. 【Android】Android江湖
  19. 写作助手-AI智能写作助手-免费写作助手软件
  20. 关于快递100发货单API介绍?

热门文章

  1. 使用DotNetOpenAuth搭建OAuth2.0授权框架——Demo代码简单说明
  2. 《Java基础学习笔记》JAVA基础
  3. HDU 1022 Train Problem I
  4. com线程模型实验之三
  5. 项目管理工具——TargetProcess(2)
  6. Java 中与()短路与()以及 或(|)短路或(||)的关系
  7. Redis 快速入门 -- Redis 命令(6)
  8. matlab中realmax
  9. UltraCompare如何使用比较 zip、rar、jar格式文件功能
  10. Swift的函数嵌套和返回内部函数