做web开发一直用到分页控件,自己也动手实现了个,使用用户自定义控件。
翻页后数据加载使用委托,将具体实现放在在使用分页控件的页面进行注册。
有图有真相,给个直观的认识:
自定义分页控件前台代码:
代码如下自定义分页控件后台代码:
privateconststringviewStateCurrentPageIndex ="CurrentPageIndex"; privateconststringviewStateRecordCount ="RecordCount"; publicdelegatevoidPageChangedHandle(); publiceventPageChangedHandle OnPageChanged; publicintPageSize { get { returnConvert.ToInt32(ddlPageSize.SelectedValue); } } publicintCurrentPageIndex { set { ViewState[viewStateCurrentPageIndex] = value; } get { if(ViewState[viewStateCurrentPageIndex] ==null) { ViewState[viewStateCurrentPageIndex] = 1; } returnConvert.ToInt32(ViewState[viewStateCurrentPageIndex]); } } publicintRecordCount { get { if(ViewState[viewStateRecordCount] ==null) { ViewState[viewStateRecordCount] = 0; } returnConvert.ToInt32(ViewState[viewStateRecordCount]); } set { ViewState[viewStateRecordCount] = value; } } privateintTotalNumberOfPages { get { returnRecordCount % PageSize == 0 ? RecordCount / PageSize : (RecordCount / PageSize) + 1; } } protectedvoidPage_Load(objectsender, EventArgs e) { if(!IsPostBack) { } } protectedvoidlabFirstPage_Click(objectsender, EventArgs e) { CurrentPageIndex = 1; this.DataBind(); } protectedvoidlabPreviousPage_Click(objectsender, EventArgs e) { CurrentPageIndex -= 1; this.DataBind(); } protectedvoidlabNextPage_Click(objectsender, EventArgs e) { CurrentPageIndex += 1; this.DataBind(); } protectedvoidlabLastPage_Click(objectsender, EventArgs e) { CurrentPageIndex = TotalNumberOfPages; this.DataBind(); } protectedvoidbtnGo_Click(objectsender, EventArgs e) { intpageNum = 1; boolisNum = Int32.TryParse(txtPageNum.Text,outpageNum); if(isNum) { CurrentPageIndex = Math.Min(pageNum, TotalNumberOfPages); } this.DataBind(); } protectedvoidddlPageSize_SelectedIndexChanged(objectsender, EventArgs e) { CurrentPageIndex = 1; this.DataBind(); } protectedoverridevoidDataBind(boolraiseOnDataBinding) { BindPager(); base.DataBind(raiseOnDataBinding); if(OnPageChanged !=null) { OnPageChanged(); } } privatevoidBindPager() { labCurrentPageIndex.Text = CurrentPageIndex.ToString(); labTotalNumberOfPages.Text = TotalNumberOfPages.ToString(); labRecordCount.Text = RecordCount.ToString(); SetNavigateEnabled(); } privatevoidSetNavigateEnabled() { txtPageNum.Text = CurrentPageIndex.ToString(); labFirstPage.Enabled =true; labPreviousPage.Enabled =true; labNextPage.Enabled =true; labLastPage.Enabled =true; labFirstPage.CssClass ="font-blue"; labPreviousPage.CssClass ="font-blue"; labNextPage.CssClass ="font-blue"; labLastPage.CssClass ="font-blue"; if(CurrentPageIndex == 1) { labFirstPage.Enabled =false; labPreviousPage.Enabled =false; labFirstPage.CssClass ="gray"; labPreviousPage.CssClass ="gray"; } if(CurrentPageIndex == TotalNumberOfPages) { labNextPage.Enabled =false; labLastPage.Enabled =false; labNextPage.CssClass ="gray"; labLastPage.CssClass ="gray"; } if(RecordCount == 0) { labFirstPage.Enabled =false; labPreviousPage.Enabled =false; labFirstPage.CssClass ="gray"; labPreviousPage.CssClass ="gray"; labNextPage.Enabled =false; labLastPage.Enabled =false; labNextPage.CssClass ="gray"; labLastPage.CssClass ="gray"; } }当前页码、总共多少条记录使用ViewState记录状态信息,因为导航控件会引起回发刷新。
分页后的数据加载,使用事件。
事件的具体实现放在使用分页控件的具体页面中,进行事件的注册。
测试分页控件的前台页面:
代码如下 text:测试分页控件的后台代码:
代码如下 privateconststringdtSourceViewStateKey ="dtSourceViewStateKey"; protectedvoidPage_Load(objectsender, EventArgs e) { if(!IsPostBack) { BindData(true); } Pager.OnPageChanged += OnPageChanged; } privatevoidBindData(boolbindRecordCount) { DataTable dtSource = GetDataSource(); var source = dtSource.AsEnumerable(); if(!string.IsNullOrEmpty(txtContent.Text.Trim())) { source = source.Where(w => w.Field在Page_Load中注册翻页后的事件。
[asp.net core]asp.net webform怎么自定义分页控件的方法
http://m.bbyears.com/wangyetexiao/117372.html
推荐访问: