本文转自:http://www.cnblogs.com/scy251147/archive/2011/04/16/2018326.html

上节中,讲述的就是Oracle存储过程分页的使用方式,但是如果大量的页面要使用这个分页存储过程,如果利用上节的方式,势必要书写大量的代码。如何才能够少些代码书写量呢?当然了,利用自定义web控件进行一下封装,也许是一个好方法,但是如何进行封装呢?

首先,就是在项目中添加一个“Web 用户控件“的页面,我们定义为:MyPagination.ascx

然后,就是在这个页面上拖入四个按钮控件和一个label控件,分别为“首页“、”上一页“、”下一页“、”尾页“,然后label控件主要是显示当前的数据记录。但是问题出来了,就是如何将分页的点击事件和其他引用页面的绑定事件给关联起来呢?

当然了,这里我们不得不考虑到C#中的委托事件,这个也许是解决此问题的最好的方法了。当然,如何来做,我们还是得分一二三步走:

首先,在页面上声明事件和委托:

public delegate void HanderMyPagerData(object sender); //委托方法

public static event HanderMyPagerData handerThis; //事件方法

其次,就是在web用户页面中的按钮被点击的时候,将事件抛出去:

public void lbtnFirst_Click(object sender, EventArgs e)

{

int pageCount = ((totalCount % PageCount) == 0) ? (totalCount / PageCount) : ((totalCount / PageCount) + 1);

StartSize = 1;

BindPagerData();

lblInfo.Text = "当前第" + StartSize + "页,总共" + pageCount + "页";

if (handerThis != null)

{

handerThis((object)BindPagerData());

}

InitPager();

}

看到了没,页面中黄色标注的地方就是事件抛出的地方。在这里,当按钮被点击的时候,代表着换页开始,然后事件会将object类型的数据集传到接收页面,然后进行处理。具体在接收页面如何做呢?

在接收页面,首先需要进行事件注册:

MyPagination.handerThis+=new MyPagination.HanderMyPagerData(MyPagination_handerThis);

然后在MyPagination_handerThis方法中就可以对抛出的事件进行处理了。

private void MyPagination_handerThis(object sender)

{

DataSet ds = sender as DataSet;

GridView1.DataSource = ds;

GridView1.DataBind();

}

大概流程明白了把,现在先来看看自定义web用户控件的代码:

前端部分:

  1. <%@ Control Language="C#" AutoEventWireup="true" CodeFile="MyPagination.ascx.cs" Inherits="MyPagination" %>
  2. <div class="Pager">
  3. <asp:LinkButton ID="lbtnFirst" runat="server" onclick="lbtnFirst_Click">首&nbsp;&nbsp;&nbsp;&nbsp;页</asp:LinkButton>
  4. <asp:LinkButton ID="lbtnPrev" runat="server" onclick="lbtnPrev_Click">上一页</asp:LinkButton>
  5. <asp:LinkButton ID="lbtnNext" runat="server" onclick="lbtnNext_Click">下一页</asp:LinkButton>
  6. <asp:LinkButton ID="lbtnEnd" runat="server" onclick="lbtnEnd_Click">末&nbsp;&nbsp;&nbsp;&nbsp;页</asp:LinkButton>
  7. <asp:Label ID="lblInfo" runat="server"></asp:Label>
  8. </div>

后端部分:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. using System.Data;
  8.  
  9. public partial class MyPagination : System.Web.UI.UserControl
  10. {
  11. public delegate void HanderMyPagerData(object sender); //委托方法
  12. public static event HanderMyPagerData handerThis; //事件方法
  13.  
  14. protected void Page_Load(object sender, EventArgs e)
  15. {
  16. InitPager();
  17. }
  18.  
  19. public static int PageCount { get; set; } //一页显示多少
  20.  
  21. public static int startSize=; //页面起始数值,初始值为1
  22. public static int StartSize
  23. {
  24. get
  25. {
  26. return startSize;
  27. }
  28. set
  29. {
  30. startSize = value;
  31. }
  32. }
  33. public static string SQL { get; set; } //要进行查询的SQL语句
  34. public static int totalCount; //总共记录条数
  35.  
  36. public static DataSet BindPagerData()
  37. {
  38. DataSet ds = Pagination.PaginationPager(SQL, PageCount, StartSize, out totalCount);
  39. return ds;
  40. }
  41.  
  42. public void InitPager()
  43. {
  44. if (StartSize <= ) //如果当前为第一页
  45. {
  46. if (StartSize * PageCount >= totalCount) //如果当前总条数小于一页的条数 那么按钮全部为不可用状态
  47. {
  48. lbtnFirst.Enabled = false;
  49. lbtnPrev.Enabled = false;
  50. lbtnNext.Enabled = false;
  51. lbtnEnd.Enabled = false;
  52. }
  53. else //如果当前总条数大于一页的条数,那么首页 上一页 不可用,下一页 末页 可用
  54. {
  55. lbtnFirst.Enabled = false;
  56. lbtnPrev.Enabled = false;
  57. lbtnNext.Enabled = true;
  58. lbtnEnd.Enabled = true;
  59. }
  60. }
  61. else //如果当前页数不是第一页
  62. {
  63. if ((totalCount - StartSize * PageCount) / PageCount == ) //表明到达了最后一页
  64. {
  65. lbtnFirst.Enabled = true;
  66. lbtnPrev.Enabled = true;
  67. lbtnNext.Enabled = false;
  68. lbtnEnd.Enabled = false;
  69. }
  70. else
  71. {
  72. lbtnFirst.Enabled = true;
  73. lbtnPrev.Enabled = true;
  74. lbtnNext.Enabled = true;
  75. lbtnEnd.Enabled = true;
  76. }
  77. }
  78.  
  79. int pageCount = ((totalCount % PageCount) == ) ? (totalCount / PageCount) : ((totalCount / PageCount) + );
  80. lblInfo.Text = "当前第" + StartSize + "页,总共" + pageCount + "页";
  81. }
  82.  
  83. public void lbtnFirst_Click(object sender, EventArgs e)
  84. {
  85. int pageCount = ((totalCount % PageCount) == ) ? (totalCount / PageCount) : ((totalCount / PageCount) + );
  86. StartSize = ;
  87. BindPagerData();
  88. lblInfo.Text = "当前第" + StartSize + "页,总共" + pageCount + "页";
  89. if (handerThis != null)
  90. {
  91. handerThis((object)BindPagerData());
  92. }
  93. InitPager();
  94. }
  95. public void lbtnPrev_Click(object sender, EventArgs e)
  96. {
  97. int pageCount = ((totalCount % PageCount) == ) ? (totalCount / PageCount) : ((totalCount / PageCount) + );
  98. if (StartSize > )
  99. {
  100. StartSize = StartSize - ;
  101. BindPagerData();
  102. }
  103. lblInfo.Text = "当前第" + StartSize + "页,总共" + pageCount + "页";
  104.  
  105. if (handerThis != null)
  106. {
  107. handerThis((object)BindPagerData());
  108. }
  109. InitPager();
  110. }
  111. public void lbtnNext_Click(object sender, EventArgs e)
  112. {
  113. int pageCount = ((totalCount % PageCount) == ) ? (totalCount / PageCount) : ((totalCount / PageCount) + );
  114. if (StartSize < pageCount)
  115. {
  116. StartSize = StartSize + ;
  117. BindPagerData();
  118.  
  119. }
  120. lblInfo.Text = "当前第" + StartSize + "页,总共" + pageCount + "页";
  121. if (handerThis != null)
  122. {
  123. handerThis((object)BindPagerData());
  124. }
  125. InitPager();
  126. }
  127. public void lbtnEnd_Click(object sender, EventArgs e)
  128. {
  129. int pageCount = ((totalCount % PageCount) == ) ? (totalCount / PageCount) : ((totalCount / PageCount) + );
  130. StartSize = pageCount;
  131. BindPagerData();
  132. lblInfo.Text = "当前第" + StartSize + "页,总共" + pageCount + "页";
  133. if (handerThis != null)
  134. {
  135. handerThis((object)BindPagerData());
  136. }
  137. InitPager();
  138. }
  139. }

接下来就是调用这个web用户控件,只需要将这个控件拉到要使用的页面上,然后页面上会自动生成这个控件的注册代码

<%@ Register src="MyPagination.ascx" tagname="MyPagination" tagprefix="uc1" %>

和服务器控件标识   <uc1:MyPagination ID="MyPagination1" runat="server" />

来看看引用页面的前端全部代码:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="PagerWithDControl.aspx.cs" Inherits="Default2" %>
  2.  
  3. <%@ Register src="MyPagination.ascx" tagname="MyPagination" tagprefix="uc1" %>
  4.  
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  6.  
  7. <html xmlns="http://www.w3.org/1999/xhtml">
  8. <head runat="server">
  9. <title></title>
  10. <link href="css/TableZB.css" rel="stylesheet" type="text/css" />
  11. <link href="css/swcss.css" rel="stylesheet" type="text/css" />
  12. <link href="css/GridViewCSS_O.css" rel="stylesheet" type="text/css" />
  13. <style type="text/css">
  14. .Pager
  15. {
  16. margin:10px;
  17. text-align:right;
  18. font-weight:bold;
  19. float:right;
  20. }
  21. .Pager a
  22. {
  23. margin-left:3px;
  24. margin-right:3px;
  25. color:Red;
  26. width:77px;
  27. height:27px;
  28. display:block;
  29. text-align:center;
  30. line-height:27px;
  31. float:left;
  32. background:url(images/loginButton.gif) no-repeat;
  33.  
  34. }
  35. .Pager a:hover
  36. {
  37. color:Blue;
  38. text-decoration:none;
  39. }
  40. .Pager a:visited
  41. {
  42. text-decoration:none;
  43. font-size:12px;
  44. color:Red;
  45. }
  46. .Pager span
  47. {
  48. clear:both;
  49. font-weight:normal;
  50. font-size:13px;
  51. }
  52. </style>
  53. </head>
  54. <body>
  55. <form id="form1" runat="server">
  56. <div>
  57.  
  58. <asp:GridView CssClass="GVtable" ID="GridView1" runat="server" Width="100%"
  59. AutoGenerateColumns="False">
  60. <Columns>
  61. <asp:TemplateField HeaderText="编号">
  62. <ItemTemplate>
  63. <%#Eval("R").ToString() %>
  64. </ItemTemplate>
  65. </asp:TemplateField>
  66. <asp:TemplateField HeaderText="纳税人识别码">
  67. <ItemTemplate>
  68. <%#Eval("nsrsbm").ToString() %>
  69. </ItemTemplate>
  70. </asp:TemplateField>
  71. <asp:TemplateField HeaderText="纳税人名称">
  72. <ItemTemplate>
  73. <%#Eval("nsr_mc") %>
  74. </ItemTemplate>
  75. </asp:TemplateField>
  76. <asp:TemplateField HeaderText="登记类型">
  77. <ItemTemplate>
  78. <%#Eval("djlx_mc")%>
  79. </ItemTemplate>
  80. </asp:TemplateField>
  81. <asp:TemplateField HeaderText="登记状态">
  82. <ItemTemplate>
  83. <%#Eval("dj_ztmc")%>
  84. </ItemTemplate>
  85. </asp:TemplateField>
  86. <asp:TemplateField HeaderText="注册类型">
  87. <ItemTemplate>
  88. <%#Eval("zclx_mc")%>
  89. </ItemTemplate>
  90. </asp:TemplateField>
  91. <asp:TemplateField HeaderText="所别">
  92. <ItemTemplate>
  93. <%#Eval("gljg_mc")%>
  94. </ItemTemplate>
  95. </asp:TemplateField>
  96. <asp:TemplateField HeaderText="专管员">
  97. <ItemTemplate>
  98. <%#Eval("zgy_mc")%>
  99. </ItemTemplate>
  100. </asp:TemplateField>
  101. <asp:TemplateField HeaderText="所属性">
  102. <ItemTemplate>
  103. <%#Eval("ssx_mc")%>
  104. </ItemTemplate>
  105. </asp:TemplateField>
  106. </Columns>
  107. </asp:GridView>
  108. </div>
  109.  
  110. <uc1:MyPagination ID="MyPagination1" runat="server" />
  111. </form>
  112. </body>
  113. </html>

后端代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. using System.Data;
  8.  
  9. public partial class Default2 : System.Web.UI.Page
  10. {
  11. protected void Page_Load(object sender, EventArgs e)
  12. {
  13. InitGV(); //记住,这里不要用Ispostback判断,否则会导致注册事件不能够正常注册
  14. }
  15.  
  16. private void InitGV()
  17. {
  18. MyPagination.PageCount=;
  19. MyPagination.SQL = "select nsrsbm,nsr_mc,djlx_mc,dj_ztmc,zclx_mc,gljg_mc,zgy_mc,ssx_mc from scott.t_yhs_djxxtz";
  20. MyPagination.handerThis+=new MyPagination.HanderMyPagerData(MyPagination_handerThis);
  21. GridView1.DataSource = MyPagination.BindPagerData();
  22. GridView1.DataBind();
  23. }
  24.  
  25. private void MyPagination_handerThis(object sender)
  26. {
  27. DataSet ds = sender as DataSet;
  28. GridView1.DataSource = ds;
  29. GridView1.DataBind();
  30.  
  31. }
  32. }

好了,这就是使用的时候,需要写的方法了,首先得有个绑定GridView的方法InitGV(),然后就是得有个处理抛出的事件的方法MyPagination_handerThis(object sender),这个方法中,你可以对传回的数据集进行判断、整合、过滤、绑定等等操作。

[转]Oracle分页之二:自定义web分页控件的封装的更多相关文章

  1. Web用户控件开发--分页控件

    分页是Web应用程序中最常用到的功能之一,在ASP.NET中,虽然自带了一些可以分页的数据控件,但其分页功能并不尽如人意.本文对于这些数据控件的假分页暂且不表,如有不明白的同学请百Google度之. ...

  2. Entity Framework后台采用分页方式取数据与AspNetPager控件的使用

    本文是一个对AspNetPager控件使用的笔记! 有关AspNetPager控件可以查看杨涛主页.这是一个开放的自定义ASP.NET控件,支持各种自定义的数据分页方式,使用很方便,而且功能也很强大, ...

  3. WPF教程十二:了解自定义控件的基础和自定义无外观控件

    这一篇本来想先写风格主题,主题切换.自定义配套的样式.但是最近加班.搬家.新租的房子打扫卫生,我家宝宝6月中旬要出生协调各种的事情,导致了最近精神状态不是很好,又没有看到我比较喜欢的主题风格去模仿的, ...

  4. 网页WEB打印控件

    网页WEB打印控件制作 在WEB系统中,打印的确是比较烦人的问题,如果我们能制作一个属于自己的自定义的打印插件,那么我们在后续自定义打印的时候能随心所欲的控制打印,这样的效果对于程序员来说是非常开心的 ...

  5. Web打印控件Lodop实现表格物流单的打印

    Web打印控件Lodop实现表格物流单的打印 一.lodop打印预览效果图 LODOP.PRINT_SETUP();打印维护效果图 LODOP.PREVIEW();打印预览图 二.写在前面 最近项目用 ...

  6. WEB打印控件Lodop(V6.x)使用说明及样例

    WEB打印控件Lodop(V6.x)使用说明及样例 Lodop是专业WEB控件,用它既可裁剪输出页面内容,又可用程序代码生成复杂打印页. 控件功能强大,却简单易用,所有调用如同JavaScript扩展 ...

  7. 示例:自定义WPF底层控件UI库 HeBianGu.General.WpfControlLib V2.0版本

    原文:示例:自定义WPF底层控件UI库 HeBianGu.General.WpfControlLib V2.0版本 一.目的:封装了一些控件到自定义的控件库中,方便快速开发 二.实现功能: 基本实现常 ...

  8. ASP.NET Web数据控件

    ASP.NET Web数据控件 1.数据控件简介 这包括数据源控件和格式设置控件,前者使您可以使用 Web 控件访问数据库中的数据,后者使您可以显示和操作ASP.NET 网页上的数据.  2.数据控件 ...

  9. Web用户控件

    用户控件是个什么东西?自定义的反复重用的控件集合 注意:创建好用户控件后,必须添加到其他web页中才能显示出来,不能直接作为一个网页来显示,因此也就不能设置用户控件为“起始页”. 用户控件与ASP.N ...

随机推荐

  1. Jquery Validation 多按钮,多表单,分组验证

    真正做到了 多按钮的验证. 在用户输入的时候就可以验证,而网上大部分多按钮验证都是必须要用户点击按钮后才可以验证. 研究了两天终于弄出来了,不知道两天是过长还是过段,现在分享给小伙伴们. 小伙伴们支持 ...

  2. ViewPager和Fragment的组合使用

    如图是效果图用的是Viewpager和fragment来实现的主界面 不过其中的预加载我没有解决 如下是代码代码比较简单 package com.ithello.dingding; import ja ...

  3. Python语言规范及风格规范

    语言规范: http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_language_ ...

  4. 发布ASP.NET Core程序到Linux生产环境

    原文翻译:Publish to a Linux Production Environment 作者:Sourabh Shirhatti 在这篇文章里我们将介绍如何在 Ubuntu 14.04 Serv ...

  5. ASP.NET Web API涉及到的上下文

    1.表示请求的上下文:HttpRequestContext; 2.表示HttpController:HttpControllerContext; 3.表示Action方法:HttpActionCont ...

  6. DirectX 9 SDK安装后在vs2010里编译BaseClasses出错问题解决方法

    打开你的dx的sdk安装目录,例如: D:/DX90SDK/Samples/C++/DirectShow/ 这里就有一个叫baseclasses的工程,为安全起见,请先备份此工程. 1,双击basec ...

  7. Get a developer license for windows store app

     获取你的开发者许可证 开发人员许可证是免费.如果您通过使用微软账户获取一个或多个开发人员的许可证,您必须续订他们每隔 30 天 当您运行或调试应用程序第一次在远程机器上或直接连接到您的开发计算机的设 ...

  8. GridView1事件

    1 protected void GridView1_DataBinding(object sender, EventArgs e) { 该事件当服务器控件绑定数据时发生. }2 protected ...

  9. [ javascript html Dom image 对象事件加载方式 ] 对象事件加载方式

    <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...

  10. android view holder 优化

    android 一般都用viewholder来优化contentView,采用sparseArray能够进一步优化 /** * 用法: ImageView bananaView = ViewHolde ...