回覆列表
  • 1 # CoreCode

    在一般情況下,DataGrid控制元件每次實現翻頁操作時,都會將資料來源中的資料重新呼叫一次,當資料中資料很多時,這樣做就會很浪費系統資源和降低程式的執行效率.這時候我們一般透過自定義分頁來解決這個問題. DataGrid控制元件的AllowCustomPaging屬性用來獲取或設定DataGrid控制元件是否允許自定義分 頁;VirtualItemCoun屬性用來獲取或設定在使用自定義分頁時DataGrid中實際的項數.要實現自定義分 頁,必須將AllowPaging與AllowCustomPaging屬性都設定為"True". 在DataGrid中要實現自定義分頁的關鍵是,使該控制元件僅僅呼叫當前顯示所需要的資料來源資料,在下面的例子中透過CurrentPageIndex和PageSize屬性的值,在資料繫結時只取當前頁需要的資料. (1)頁面程式碼: 複製程式碼 程式碼如下:<%@ Page language="c#" Codebehind="Main.aspx.cs" AutoEventWireup="false" Inherits="SissonDemo.Main" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <HEAD> <title>Main</title> <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"> <meta name="CODE_LANGUAGE" Content="C#"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout"> <form method="post" runat="server"> <FONT face="宋體"> <asp:DataGrid runat="server" Width="792px" Height="96px" AllowCustomPaging="True" AllowPaging="True" PageSize="5"> <PagerStyle Mode="NumericPages"></PagerStyle> </asp:DataGrid></FONT> </form> </body> </HTML> (2)後臺程式碼: 複製程式碼 程式碼如下:using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Data.SqlClient; namespace SissonDemo { /**//// <summary> /// Main 的摘要說明。 /// </summary> public class Main : System.Web.UI.Page { protected System.Web.UI.WebControls.DataGrid DataGrid1; int startIndex = 0;//用來儲存當前頁資料項的起始索引 private void Page_Load(object sender, System.EventArgs e) { if(!IsPostBack) { Bind();//初始化時進行資料繫結 } } void Bind()//繫結資料方法 { //定義資料庫連線物件 SqlConnection cn=new SqlConnection("server=.;database=pubs;uid=sa;pwd="); //建立資料適配物件 SqlDataAdapter da=new SqlDataAdapter("select title_id ,title ,type, pub_id ,price,pubdate from titles",cn); //建立DataSet物件 DataSet ds=new DataSet(); try { //從指定的索引開始取PageSize條記錄. da.Fill(ds,startIndex,DataGrid1.PageSize,"CurDataTable"); da.Fill(ds,"AllDataTable");//填充資料集合 //設定DataGrid控制元件實際要顯示的項數 DataGrid1.VirtualItemCount=ds.Tables["AllDataTable"].Rows.Count; //進行資料繫結 DataGrid1.DataSource=ds.Tables["CurDataTable"]; DataGrid1.DataBind(); } catch { Page.RegisterClientScriptBlock("","<script>alert("資料顯示錯 誤");</script>"); } } Web 窗體設計器生成的程式碼#region Web 窗體設計器生成的程式碼 override protected void OnInit(EventArgs e) { // // CODEGEN: 該呼叫是 ASP.NET Web 窗體設計器所必需的。 // InitializeComponent(); base.OnInit(e); } /**//// <summary> /// 設計器支援所需的方法 - 不要使用程式碼編輯器修改 /// 此方法的內容。 /// </summary> private void InitializeComponent() { this.DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler (this.DataGrid1_PageIndexChanged); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e) { //設定DataGrid當前頁的索引值為使用者選擇的頁的索引 DataGrid1.CurrentPageIndex=e.NewPageIndex; //取得當前頁為止總共有多少條記錄,以便在下一頁就從該記錄開始讀取 startIndex=DataGrid1.PageSize*DataGrid1.CurrentPageIndex; //取得繫結資料 Bind(); } } } 在這段程式中,首先在資料繫結時,設定DataGrid控制元件的VirtualItemCoun屬性值為查詢結果集中的 記錄總數,然後取得當前頁要顯示的資料,初始化時當前頁顯示的資料為從取到的資料的零位置開始,到 DataGrid控制元件的PageSize屬性的設定值為止的資料記錄數.在分頁操作中重新定義了取得下一頁資料時的資料項的開始索引值,然後呼叫資料繫結方法把取到的新資料和DataGrid控制元件重新繫結.

  • 中秋節和大豐收的關聯?
  • 蔡依林是不是和周杰倫一個班的同學?