Maison >développement back-end >Tutoriel C#.Net >Résumé de trois méthodes de pagination dans Asp.Net

Résumé de trois méthodes de pagination dans Asp.Net

高洛峰
高洛峰original
2017-01-10 14:02:451412parcourir

Habituellement, il existe trois méthodes de pagination, à savoir le propre espace d'affichage des données d'asp.net tel que GridView et d'autres paginations, des contrôles de pagination tiers tels que aspnetpager, la pagination de procédures stockées, etc. Voici des résumés.
Première méthode : utilisez la pagination intégrée de GridView. Il s'agit de la méthode de pagination la plus simple.
Méthode front-end :

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

Méthode back-end :
Code

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(); 
} 
} 
}

Deuxième : utilisez AspNetPager.dll avec un affichage personnalisé pour la pagination
Ceci Vous devez ajouter une référence à aspnetpager.dll ici
Frontend :

<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>

Backend :

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(); 
} 
} 
}

Troisième méthode : utiliser AspNetPager combiné avec des procédures stockées pour la pagination
Cette méthode de pagination est un peu plus compliquée, mais elle peut gérer de plus grandes quantités de données.
Front-end :

<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>

Back-end :

//绑定方法中需要传递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();

La procédure stockée utilisée ici est plus compliquée, car l'instruction SQL ne peut pas être placée dans la vue, et il ne peut pas être interrogé directement à partir de la table. Le résultat est que ce processus stocké est un peu anormal. Si des amis le voient, j'espère qu'ils pourront vous donner des conseils.
En fait, le cœur de la procédure stockée est :

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

Code

--下方可以忽略 
--我用到的是存储过程: 
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&#39;a&#39;, 
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&#39;a&#39;, 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 = &#39;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&#39; 
select @sql=@sql+&#39;,sum(case tickettype_name_dec when &#39;&#39;&#39;+tickettype_name_dec+&#39;&#39;&#39; then expr2 else 0 end) [&#39;+tickettype_name_dec+&#39;]&#39; 
from (select distinct tickettype_name_dec from tb_Ticket_Type ) as a 
set @sql=@sql+&#39; ,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 &#39; 
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

Pour plus d'articles connexes résumant les trois méthodes de pagination dans Asp.Net, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn