博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]Oracle分页之二:自定义web分页控件的封装
阅读量:6131 次
发布时间:2019-06-21

本文共 7829 字,大约阅读时间需要 26 分钟。

本文转自:

 

上节中,讲述的就是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用户控件的代码:

前端部分:

 

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MyPagination.ascx.cs" Inherits="MyPagination" %>
首    页
上一页
下一页
末    页

 

后端部分:

 

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data;public partial class MyPagination : System.Web.UI.UserControl{    public delegate void HanderMyPagerData(object sender); //委托方法    public static event HanderMyPagerData handerThis;  //事件方法    protected void Page_Load(object sender, EventArgs e)    {        InitPager();    }    public static int PageCount { get; set; } //一页显示多少    public static int startSize=1;  //页面起始数值,初始值为1    public static int StartSize     {         get        {            return startSize;        }        set        {            startSize = value;        }    }    public static string SQL { get; set; } //要进行查询的SQL语句    public static int totalCount; //总共记录条数    public static DataSet  BindPagerData()    {        DataSet ds = Pagination.PaginationPager(SQL, PageCount, StartSize, out  totalCount);        return ds;    }    public void InitPager()    {        if (StartSize <= 1)  //如果当前为第一页        {            if (StartSize * PageCount >= totalCount)  //如果当前总条数小于一页的条数  那么按钮全部为不可用状态            {                lbtnFirst.Enabled = false;                lbtnPrev.Enabled = false;                lbtnNext.Enabled = false;                lbtnEnd.Enabled = false;            }            else  //如果当前总条数大于一页的条数,那么首页  上一页 不可用,下一页 末页 可用            {                lbtnFirst.Enabled = false;                lbtnPrev.Enabled = false;                lbtnNext.Enabled = true;                lbtnEnd.Enabled = true;            }        }        else  //如果当前页数不是第一页        {            if ((totalCount - StartSize * PageCount) / PageCount == 0)  //表明到达了最后一页            {                lbtnFirst.Enabled = true;                lbtnPrev.Enabled = true;                lbtnNext.Enabled = false;                lbtnEnd.Enabled = false;            }            else            {                lbtnFirst.Enabled = true;                lbtnPrev.Enabled = true;                lbtnNext.Enabled = true;                lbtnEnd.Enabled = true;            }        }        int pageCount = ((totalCount % PageCount) == 0) ? (totalCount / PageCount) : ((totalCount / PageCount) + 1);        lblInfo.Text = "当前第" + StartSize + "页,总共" + pageCount + "页";    }    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();    }    public void lbtnPrev_Click(object sender, EventArgs e)    {        int pageCount = ((totalCount % PageCount) == 0) ? (totalCount / PageCount) : ((totalCount / PageCount) + 1);        if (StartSize > 1)        {            StartSize = StartSize - 1;            BindPagerData();        }        lblInfo.Text = "当前第" + StartSize + "页,总共" + pageCount + "页";        if (handerThis != null)        {            handerThis((object)BindPagerData());        }        InitPager();    }    public void lbtnNext_Click(object sender, EventArgs e)    {        int pageCount = ((totalCount % PageCount) == 0) ? (totalCount / PageCount) : ((totalCount / PageCount) + 1);        if (StartSize < pageCount)        {            StartSize = StartSize + 1;            BindPagerData();                   }        lblInfo.Text = "当前第" + StartSize + "页,总共" + pageCount + "页";        if (handerThis != null)        {            handerThis((object)BindPagerData());        }        InitPager();    }    public void lbtnEnd_Click(object sender, EventArgs e)    {        int pageCount = ((totalCount % PageCount) == 0) ? (totalCount / PageCount) : ((totalCount / PageCount) + 1);        StartSize = pageCount;        BindPagerData();        lblInfo.Text = "当前第" + StartSize + "页,总共" + pageCount + "页";        if (handerThis != null)        {            handerThis((object)BindPagerData());        }        InitPager();    }}

 

 

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

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

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

 

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

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PagerWithDControl.aspx.cs" Inherits="Default2" %><%@ Register src="MyPagination.ascx" tagname="MyPagination" tagprefix="uc1" %>         
<%#Eval("R").ToString() %>
<%#Eval("nsrsbm").ToString() %>
<%#Eval("nsr_mc") %>
<%#Eval("djlx_mc")%>
<%#Eval("dj_ztmc")%>
<%#Eval("zclx_mc")%>
<%#Eval("gljg_mc")%>
<%#Eval("zgy_mc")%>
<%#Eval("ssx_mc")%>

 

 

后端代码如下:

 

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data;public partial class Default2 : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)    {        InitGV();  //记住,这里不要用Ispostback判断,否则会导致注册事件不能够正常注册    }    private void InitGV()    {        MyPagination.PageCount=10;        MyPagination.SQL = "select nsrsbm,nsr_mc,djlx_mc,dj_ztmc,zclx_mc,gljg_mc,zgy_mc,ssx_mc from scott.t_yhs_djxxtz";        MyPagination.handerThis+=new MyPagination.HanderMyPagerData(MyPagination_handerThis);        GridView1.DataSource = MyPagination.BindPagerData();        GridView1.DataBind();    }    private void MyPagination_handerThis(object sender)    {        DataSet ds = sender as DataSet;        GridView1.DataSource = ds;        GridView1.DataBind();    }}

 

 

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

转载地址:http://ukaua.baihongyu.com/

你可能感兴趣的文章
洛谷——P1596 [USACO10OCT]湖计数Lake Counting
查看>>
智力大冲浪
查看>>
JSONP实现跨域
查看>>
虚拟机VMware 9安装苹果MAC OSX 10.8图文教程
查看>>
POJ3694 Network
查看>>
微信小程序开发-框架
查看>>
redo、undo、binlog的区别
查看>>
DropDownList 控制日期控件显示格式
查看>>
RecycleView设置顶部分割线(记录一个坑)
查看>>
【设计模式系列】单例模式的7种写法
查看>>
汉字转拼音 (转)
查看>>
Machine Learning Techniques -6-Support Vector Regression
查看>>
会计基础_001
查看>>
ajax请求拿到多条数据拼接显示在页面中
查看>>
小程序: 查看正在写的页面
查看>>
dedecms生成文档数据库崩溃 mysql daemon failed to start
查看>>
Linux的50个基本命令
查看>>
Objective-C中创建单例方法的步骤
查看>>
Jenkins持续集成环境部署
查看>>
emoji等表情符号存mysql的方法
查看>>