Asp.Net中的三种分页方式总结-阿里云开发者社区

开发者社区> 技术小胖子> 正文

Asp.Net中的三种分页方式总结

简介:
+关注继续查看

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

通常分页有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 DESCAS 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 DESCAS rownum, 
* from ##t) as U 
WHERE rownum between @startIndex and @endIndex 

drop table ##t 




     本文转自wengyuli 51CTO博客,原文链接:http://blog.51cto.com/wengyuli/587841,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
26785 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10062 0
使用SSH远程登录阿里云ECS服务器
远程连接服务器以及配置环境
2508 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9157 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13875 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
7488 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4498 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7361 0
21119
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载