做web开发一直用到分页控件,自己也动手实现了个,使用用户自定义控件。

翻页后数据加载使用委托,将具体实现放在在使用分页控件的页面进行注册。
有图有真相,给个直观的认识:
自定义分页控件前台代码:
<style type="text/css">
.pager-m-l {
margin-left: 10px;
}
.pager {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
color: #333;
background-color: #fff;
text-align: center;
border: 1px solid #eee;
border-radius: 5px;
height: 30px;
line-height: 30px;
margin: 10px auto;
width: 650px;
}
.font-blue {
color: #5bc0de;
}
.pager a {
color: #5bc0de;
text-decoration: none;
}
.pager a.gray {
color: #808080;
}
.pager-num {
width: 30px;
text-align: center;
}
.pager-form-control {
color: #555;
background-color: #fff;
background-image: none;
border: 1px solid #ccc;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
-webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
-o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
padding: 2px 0px;
margin: 0px 2px;
}
.pager-form-control:focus {
border-color: #66afe9;
outline: 0;
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
}
.btn {
display: inline-block;
padding: 2px;
font-weight: normal;
text-align: center;
white-space: nowrap;
vertical-align: middle;
-ms-touch-action: manipulation;
touch-action: manipulation;
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
background-image: none;
border: 1px solid transparent;
border-radius: 4px;
}
.btn-default {
color: #333;
background-color: #fff;
border-color: #ccc;
}
</style>
<div class="pager">
<span>当前<asp:Label runat="server" ID="labCurrentPageIndex" CssClass="font-blue"></asp:Label>/<asp:Label runat="server" CssClass="font-blue" ID="labTotalNumberOfPages"></asp:Label>页</span>
<span class="pager-m-l">共<asp:Label runat="server" CssClass="font-blue" ID="labRecordCount"></asp:Label>条记录</span>
<span class="pager-m-l">
<asp:LinkButton runat="server" ID="labFirstPage" OnClick="labFirstPage_Click">首页</asp:LinkButton>
|
<asp:LinkButton runat="server" ID="labPreviousPage" OnClick="labPreviousPage_Click">上一页</asp:LinkButton>
|<asp:LinkButton runat="server" ID="labNextPage" OnClick="labNextPage_Click">下一页</asp:LinkButton>
|<asp:LinkButton runat="server" ID="labLastPage" OnClick="labLastPage_Click">尾页</asp:LinkButton>
</span>
<span class="pager-m-l">跳至<asp:TextBox runat="server" ID="txtPageNum" CssClass="pager-form-control pager-num">1</asp:TextBox>页
<asp:Button runat="server" Text="GO" ID="btnGo" CssClass="btn btn-default" OnClick="btnGo_Click" /></span>
<span class="pager-m-l">
<asp:DropDownList runat="server" ID="ddlPageSize" CssClass="pager-form-control" AutoPostBack="true" OnSelectedIndexChanged="ddlPageSize_SelectedIndexChanged">
<asp:ListItem Text="10" Value="10"></asp:ListItem>
<asp:ListItem Text="20" Value="20"></asp:ListItem>
<asp:ListItem Text="30" Value="30"></asp:ListItem>
<asp:ListItem Text="50" Value="50"></asp:ListItem>
<asp:ListItem Text="100" Value="100"></asp:ListItem>
</asp:DropDownList>条/每页</span>
</div>
自定义分页控件后台代码:
private const string viewStateCurrentPageIndex = "CurrentPageIndex";
private const string viewStateRecordCount = "RecordCount";
public delegate void PageChangedHandle();
public event PageChangedHandle OnPageChanged;
public int PageSize
{
get
{
return Convert.ToInt32(ddlPageSize.SelectedValue);
}
}
public int CurrentPageIndex
{
set
{
ViewState[viewStateCurrentPageIndex] = value;
}
get
{
if (ViewState[viewStateCurrentPageIndex] == null)
{
ViewState[viewStateCurrentPageIndex] = 1;
}
return Convert.ToInt32(ViewState[viewStateCurrentPageIndex]);
}
}
public int RecordCount
{
get
{
if (ViewState[viewStateRecordCount] == null)
{
ViewState[viewStateRecordCount] = 0;
}
return Convert.ToInt32(ViewState[viewStateRecordCount]);
}
set
{
ViewState[viewStateRecordCount] = value;
}
}
private int TotalNumberOfPages
{
get
{
return RecordCount % PageSize == 0 ? RecordCount / PageSize : (RecordCount / PageSize) + 1;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
}
}
protected void labFirstPage_Click(object sender, EventArgs e)
{
CurrentPageIndex = 1;
this.DataBind();
}
protected void labPreviousPage_Click(object sender, EventArgs e)
{
CurrentPageIndex -= 1;
this.DataBind();
}
protected void labNextPage_Click(object sender, EventArgs e)
{
CurrentPageIndex += 1;
this.DataBind();
}
protected void labLastPage_Click(object sender, EventArgs e)
{
CurrentPageIndex = TotalNumberOfPages;
this.DataBind();
}
protected void btnGo_Click(object sender, EventArgs e)
{
int pageNum = 1;
bool isNum = Int32.TryParse(txtPageNum.Text, out pageNum);
if (isNum)
{
CurrentPageIndex = Math.Min(pageNum, TotalNumberOfPages);
}
this.DataBind();
}
protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
{
CurrentPageIndex = 1;
this.DataBind();
}
protected override void DataBind(bool raiseOnDataBinding)
{
BindPager();
base.DataBind(raiseOnDataBinding);
if (OnPageChanged != null)
{
OnPageChanged();
}
}
private void BindPager()
{
labCurrentPageIndex.Text = CurrentPageIndex.ToString();
labTotalNumberOfPages.Text = TotalNumberOfPages.ToString();
labRecordCount.Text = RecordCount.ToString();
SetNavigateEnabled();
}
private void SetNavigateEnabled()
{
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记录状态信息,因为导航控件会引起回发刷新。
分页后的数据加载,使用事件。
事件的具体实现放在使用分页控件的具体页面中,进行事件的注册。
测试分页控件的前台页面:
<div style="margin-bottom:10px;"> text: <asp:TextBox ID="txtContent" runat="server"></asp:TextBox> <asp:Button ID="btnQuery" runat="server" Text="查 询" OnClick="btnQuery_Click"/> </div> <div> <asp:GridView ID="gvList" runat="server" Width="99%" AutoGenerateColumns="true"></asp:GridView> <uc1:PagerControl runat="server" ID="Pager" /> </div>
测试分页控件的后台代码:
private const string dtSourceViewStateKey = "dtSourceViewStateKey";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindData(true);
}
Pager.OnPageChanged += OnPageChanged;
}
private void BindData(bool bindRecordCount)
{
DataTable dtSource = GetDataSource();
var source = dtSource.AsEnumerable();
if (!string.IsNullOrEmpty(txtContent.Text.Trim()))
{
source = source.Where(w => w.Field<string>("text").Contains(txtContent.Text.Trim()));
}
if (bindRecordCount)
{
Pager.RecordCount = source.Count();
Pager.CurrentPageIndex = 1;
Pager.DataBind();
}
gvList.DataSource = source
.Skip((Pager.CurrentPageIndex - 1) * Pager.PageSize)
.Take(Pager.PageSize)
.Select(r => new { id = r["id"].ToString(), text = r["text"].ToString() })
.ToList();
gvList.DataBind();
}
private void OnPageChanged()
{
BindData(false);
}
private DataTable InitDataTable()
{
DataTable dtSource = new DataTable();
DataColumn id = new DataColumn("id");
id.AutoIncrement = true;
id.AutoIncrementSeed = 1;
dtSource.Columns.Add(id);
dtSource.Columns.Add("text");
for (int i = 1; i <= 1000; i++)
{
DataRow dr = dtSource.NewRow();
dr["text"] = "内容" + i;
dtSource.Rows.Add(dr);
}
return dtSource;
}
private DataTable GetDataSource()
{
if (ViewState[dtSourceViewStateKey] == null)
{
ViewState[dtSourceViewStateKey] = InitDataTable();
}
return ViewState[dtSourceViewStateKey] as DataTable;
}
protected void btnQuery_Click(object sender, EventArgs e)
{
BindData(true);
}
在Page_Load中注册翻页后的事件。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# asp.net
# webform
# 分页控件
# asp.net分页控件使用详解【附实例下载】
# 解析asp.net的分页控件
# asp.net自定义分页控件示例
# 关于asp.net 自定义分页控件
# asp.net中使用自定义控件的方式实现一个分页控件的代码
# 分享一个asp.net pager分页控件
# asp.net分页控件AspNetPager的样式美化
# asp.net下Repeater使用 AspNetPager分页控件
# AspNetAjaxPager
# Asp.Net通用无刷新Ajax分页控件
# 支持多样式多数据绑定
# asp.net web页面自定义分页控件使用详解
# 分页
# 自定义
# 翻页
# 加载
# 放在
# 下一页
# 上一页
# 每页
# 尾页
# 首页
# 给个
# 大家多多
# 有图
# 实现了
# outline
# btn
# weight
# normal
# white
# display
相关文章:
网站设计制作企业有哪些,抖音官网主页怎么设置?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
如何在自有机房高效搭建专业网站?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
Python如何创建带属性的XML节点
英语简历制作免费网站推荐,如何将简历翻译成英文?
制作销售网站教学视频,销售网站有哪些?
名字制作网站免费,所有小说网站的名字?
盐城做公司网站,江苏电子版退休证办理流程?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
平台云上自助建站如何快速打造专业网站?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
股票网站制作软件,网上股票怎么开户?
企业微网站怎么做,公司网站和公众号有什么区别?
公司网站设计制作厂家,怎么创建自己的一个网站?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
如何选择高效稳定的ISP建站解决方案?
建站之星logo尺寸如何设置最合适?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
如何在橙子建站上传落地页?操作指南详解
建站主机与虚拟主机有何区别?如何选择最优方案?
如何有效防御Web建站篡改攻击?
如何在IIS中新建站点并配置端口与物理路径?
建站之星代理费用多少?最新价格详情介绍
如何在万网自助建站中设置域名及备案?
临沂网站制作公司有哪些,临沂第四中学官网?
广德云建站网站建设方案与建站流程优化指南
导航网站建站方案与优化指南:一站式高效搭建技巧解析
建站之星代理平台如何选择最佳方案?
网页设计网站制作软件,microsoft office哪个可以创建网页?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
建站主机数据库如何配置才能提升网站性能?
建站之星官网登录失败?如何快速解决?
建站之星多图banner生成与模板自定义指南
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
如何通过虚拟机搭建网站?详细步骤解析
红河网站制作公司,红河事业单位身份证如何上传?
c++怎么用jemalloc c++替换默认内存分配器【性能】
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
成都网站制作报价公司,成都工业用气开户费用?
建站之星如何快速生成多端适配网站?
建站168自助建站系统:快速模板定制与SEO优化指南
制作网站的模板软件,网站怎么建设?
简历在线制作网站免费,免费下载个人简历的网站是哪些?
*请认真填写需求信息,我们会在24小时内与您取得联系。