全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

asp.net webform自定义分页控件

做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 


相关文章: 阿里云网站制作公司,阿里云快速搭建网站好用吗?  如何选择高效便捷的WAP商城建站系统?  宁波免费建站如何选择可靠模板与平台?  家具网站制作软件,家具厂怎么跑业务?  如何在阿里云购买域名并搭建网站?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  建站之星在线版空间:自助建站+智能模板一键生成方案  建站之星免费版是否永久可用?  如何快速搭建支持数据库操作的智能建站平台?  高防服务器租用首荐平台,企业级优惠套餐快速部署  c# 在ASP.NET Core中管理和取消后台任务  如何用景安虚拟主机手机版绑定域名建站?  南宁网站建设制作定制,南宁网站建设可以定制吗?  如何通过PHP快速构建高效问答网站功能?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  建站主机选哪种环境更利于SEO优化?  如何制作网站标识牌,动态网站如何制作(教程)?  定制建站如何定义?其核心优势是什么?  如何选择适合PHP云建站的开源框架?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  建站主机是否等同于虚拟主机?  微信h5制作网站有哪些,免费微信H5页面制作工具?  如何用低价快速搭建高质量网站?  如何在阿里云通过域名搭建网站?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  学校建站服务器如何选型才能满足性能需求?  名字制作网站免费,所有小说网站的名字?  浅谈Javascript中的Label语句  教育培训网站制作流程,请问edu教育网站的域名怎么申请?  大连网站设计制作招聘信息,大连投诉网站有哪些?  如何在西部数码注册域名并快速搭建网站?  网站制作企业,网站的banner和导航栏是指什么?  高端云建站费用究竟需要多少预算?  如何选择建站程序?包含哪些必备功能与类型?  建站之星后台密码遗忘或太弱?如何重置与强化?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  建站之星云端配置指南:模板选择与SEO优化一键生成  广东专业制作网站有哪些,广东省能源集团有限公司官网?  ,柠檬视频怎样兑换vip?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  如何在腾讯云服务器上快速搭建个人网站?  如何快速生成高效建站系统源代码?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  如何快速搭建响应式可视化网站?  建站之星×万网:智能建站系统+自助建站平台一键生成 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。