Heim > Artikel > Backend-Entwicklung > Zusammenfassung der drei Paging-Methoden in Asp.Net
Normalerweise gibt es drei Paging-Methoden, nämlich den eigenen Datenanzeigebereich von asp.net wie GridView und andere Paging-Funktionen, Paging-Steuerelemente von Drittanbietern wie aspnetpager, Paging gespeicherter Prozeduren usw. Hier finden Sie Zusammenfassungen.
Die erste Methode: Verwenden Sie die integrierte Paging-Methode von GridView. Dies ist die einfachste Paging-Methode.
Front-End-Methode:
<asp:GridView ID="GridView1" AllowPaging="true" runat="server" onpageindexchanging="GridView1_PageIndexChanging" PageSize="3"> </asp:GridView>
Back-End-Methode:
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(); } } }
Zweitens: Verwenden Sie AspNetPager.dll mit personalisierter Anzeige für das Paging
Dies Sie müssen überall einen Verweis auf aspnetpager.dll hinzufügen
Front-End:
<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>
Back-End:
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(); } } }
Dritte Methode: Verwenden Sie AspNetPager in Kombination mit gespeicherten Prozeduren für Paging
Diese Paging-Methode ist etwas komplizierter, kann aber größere Datenmengen verarbeiten.
Frontend:
<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>
Backend:
//绑定方法中需要传递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();
Die hier verwendete gespeicherte Prozedur ist komplizierter, da die SQL-Anweisung nicht in der Ansicht platziert werden kann und Es kann nicht direkt aus der Tabelle abgefragt werden. Das Ergebnis ist, dass dieser gespeicherte Prozess etwas abnormal ist. Wenn Freunde ihn sehen, können sie hoffentlich einen Rat geben.
Tatsächlich ist der Kern der gespeicherten Prozedur:
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'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
Weitere verwandte Artikel, die die drei Paging-Methoden in Asp.Net zusammenfassen, finden Sie hier zur chinesischen PHP-Website!