ホームページ  >  記事  >  バックエンド開発  >  Asp.Net の 3 つのページング メソッドの概要

Asp.Net の 3 つのページング メソッドの概要

高洛峰
高洛峰オリジナル
2017-01-10 14:02:451344ブラウズ

通常、ページングには 3 つの方法があります。すなわち、GridView やその他のページングなどの asp.net 独自のデータ表示スペース、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(); 
} 
} 
}

2 番目: ページング用にパーソナライズされた表示で 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(); 
} 
} 
}

3 番目の方法: ページングには 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&#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

Asp.Net の 3 つのページング メソッドを要約したその他の関連記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。