PageChanged 事件回傳新頁碼,配合 PageIndex、PageSize、RecordCount 屬性實現資料繫結。綜合模式

普通模式

設計時支援

<%@ Register Assembly="Cyclone.CustomPager.Pager" Namespace="Cyclone.CustomPager.Pager" TagPrefix="Cyclone" %>
...
<asp:GridView ID="GridView1" runat="server" AllowPaging="false" ...>...</asp:GridView>
<Cyclone:AspNetPager ID="AspNetPager1" runat="server"
PageMode="Numeric" PageSize="15" OnPageChanged="Page_Changed"
FirstPageText="首頁" PrePageText="上一頁" NextPageText="下一頁" EndPageText="末頁"
ButtonText="GO" Width="80%" BackColor="#FFE0C0" BorderColor="#FFC0C0" BorderStyle="Solid" BorderWidth="1px" ForeColor="#804040">
<ButtonStyle CssClass="btn1_mouseout" Width="30px" />
<TextBoxStyle Width="30px" CssClass="blue_rounded"/>
<LabelStyle ForeColor="Red" Font-Bold="True" />
</Cyclone:AspNetPager>
public partial class _Default : System.Web.UI.Page
{
private List _data = new List();
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
GetData(); // 模擬 1000 筆資料
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
AspNetPager1.PageIndex = 1;
BindData();
}
}
private void GetData()
{
for (int i = 0; i < 1000; i++)
_data.Add(new User { ID = i + 1, UserName = "用戶" + i, Email = "test@test.com", Address = "北京" });
}
protected void Page_Changed(object sender, EventArgs e)
{
BindData();
}
private void BindData()
{
AspNetPager1.RecordCount = _data.Count;
var pageData = _data.Skip(AspNetPager1.PageSize * (AspNetPager1.PageIndex - 1))
.Take(AspNetPager1.PageSize).ToList();
GridView1.DataSource = pageData;
GridView1.DataBind();
}
}
public class User { public int ID { get; set; } public string UserName { get; set; } public string Email { get; set; } public string Address { get; set; } }
IPostBackEventHandler 處理分頁按鈕回傳。ViewState 保存 PageIndex、RecordCount 等狀態。CreateChildControls 動態建立 LinkButton、TextBox、Label 等子控制項。Render 依 PageMode 輸出不同 HTML 結構。Designer 類別、ToolboxBitmap、ParseChildren、PersistChildren 屬性實現樣式子標籤持久化。完整專案(含設計時組件、測試網站):下載地址