注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我只是一个人

我爱一个人

 
 
 

日志

 
 

在用户控件中使用委托与事件调用自定义方法设计的分页控件  

2012-02-15 10:46:01|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

我们要给控件定义一个委托

public delegate void PageChangeHandler(object send, int nPageIndex);//定义一个委托

 

首先为该控件定义了一个事件  public event PageChangeHandler OnPageChange;//定义一个名字叫做OnPageChange的事件,委托给PageChangeHandler    event:定义事件的关键词

为了给这个控件一些属性,我们当然要按照正常的方法定一些属性:

在这里他们还是字段,当然我们会在属性中用到这些字段的

private int _PageCount = 0;

    private int _RecordCount = 0;

    private int _PageIndex = 1;

然后我们来设置属性吧

 

    public int PageCount

    {

        get {}

        set {}

    }

    public int RecordCount

    {

      get {}

      set {}

    }

    public int PageIndex

    {

      get {}

      set {}

    }

这样做后我门怎么用呢?看看吧,当你在一个页面上引用这个控件以后查看一下他的属性你会发现

 

在用户控件中使用委托与事件调用自定义方法设计的分页控件 - 坚持下来的人! - 我只是一个人

 

 

 

 

下边看一下全部的代码组织吧?不然还会迷茫的!

 

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

public delegate void PageChangeHandler(object send, int nPageIndex);//°?°?????D

 

public partial class controls_PageNavigator : System.Web.UI.UserControl

{

    public event PageChangeHandler OnPageChange;//°?°?????aOnPageChange????tê????D?PageChangeHandler  event:??tê?

    private int _PageCount = 0;

    private int _RecordCount = 0;

    private int _PageIndex = 1;

 

    protected void Page_Load(object sender, EventArgs e)

    {

 

    }

 

    public int PageCount

    {

        get

        {

            return int.Parse(this.LblPageCount.Text);

        }

        set

        {

            _PageCount = value;

            /*

            if (_PageCount < 2)

            {

                //this.txtNewPageIndex.Enabled = false;

                //this.LnkBtnGoto.Enabled = false;

            }

            else

            {

                //this.txtNewPageIndex.Enabled = true;

                //this.LnkBtnGoto.Enabled = true;

            }

             */

            this.LblPageCount.Text = _PageCount.ToString();

        }

    }

    public int RecordCount

    {

        get

        {

            return int.Parse(this.LblRecordCount.Text);

        }

        set

        {

            _RecordCount = value;

            this.LblRecordCount.Text = _RecordCount.ToString();

        }

    }

    public int PageIndex

    {

        get

        {

            return int.Parse(this.LblPageIndex.Text);

        }

        set

        {

            _PageIndex = value;

            this.txtNewPageIndex.Text = this.LblPageIndex.Text = _PageIndex.ToString();

            if (_PageIndex < 2)

            {

                this.LnkBtnFirst.Enabled = false;

                this.LnkBtnPrevious.Enabled = false;

            }

            else

            {

                this.LnkBtnFirst.Enabled = true;

                this.LnkBtnPrevious.Enabled = true;

            }

            if (_PageIndex >= _PageCount)

            {

                this.LnkBtnNext.Enabled = false;

                this.LnkBtnLast.Enabled = false;

            }

            else

            {

                this.LnkBtnNext.Enabled = true;

                this.LnkBtnLast.Enabled = true;

            }

        }

    }

 

    protected void LnkBtnFirst_Click(object sender, EventArgs e)

    {

        try

        {

            OnPageChange(sender, 1);

        }

        catch { }

    }

    protected void LnkBtnPrevious_Click(object sender, EventArgs e)

    {

        try

        {

            int n = Convert.ToInt32(this.LblPageIndex.Text);

            n--;

            OnPageChange(sender, n);

        }

        catch

        {

            throw;

        }

    }

    protected void LnkBtnNext_Click(object sender, EventArgs e)

    {

        try

        {

            int n = Convert.ToInt32(this.LblPageIndex.Text);

            n++;

            OnPageChange(sender, n);  //调用委托

        }

        catch

        {

            throw;

        }

    }

    protected void LnkBtnLast_Click(object sender, EventArgs e)

    {

        try

        {

            int n = Convert.ToInt32(this.LblPageCount.Text);

            OnPageChange(sender, n);  //调用委托

        }

        catch

        {

            throw;

        }

    }

    protected void LnkBtnGoto_Click(object sender, EventArgs e)

    {

        int n;

        try

        {

            n = Convert.ToInt32(this.txtNewPageIndex.Text);

        }

        catch

        {

            n = Convert.ToInt32(this.LblPageIndex.Text);

        }

        int np = Convert.ToInt32(this.LblPageCount.Text.Trim());

        if (n > np)

            n = np;

        if (n < 1)

            n = 1;

        OnPageChange(sender, n);  ////调用委托

    }

}

 

灰色背景部分是我们在说明中提到的,代码中有些用到的是控件名,这个应该可以很好的分辨出来吧

现在这个控件有了属性和方法,我们当然要用他的这些属性和方法了,不然我们做他来干什么!

当我门在一个页面中引入这个用户控件以后

<%@ Register Src="../../controls/PageNavigator.ascx" TagName="PageNavigator" TagPrefix="uc1" %>

我们在需要的部分让它呈现给你用户

<div style="width:98%;" align="right"><uc1:PageNavigator ID="PageNavigator1" runat="server" /></div>

看吧,当你在设计视图中选中这个控件,并查看就会出现上边那副图的景象,有属性,可是……方法呢?没有方法啊!

是的,我也不明白这是为什么,你可以去问下微软公司的人,比如:比尔

这里有一个方法可以使用他的方法的,我们在引用用户控件的页面后台代码中看看去

我们在页面加载的时候,将某一个方法委托给了PageChangeHandler(PageNavigator1_PageChange);

还记得在用户控件中的public delegate void PageChangeHandler(object send, int nPageIndex);/

对,就是他

当然,我们要有一个方法,this.PageNavigator1.OnPageChange以提供给委托的,下边请看

/// <summary>

    /// ¤?°3

    /// </summary>

    /// <returns>¤?°3</returns>

    ///  Code By DengXi   

   

    protected void PageNavigator1_PageChange(object sender, int PageIndex)

    {

        StartLoad(PageIndex);

    }

是的,我们要创建一个这样的方法,而且这个方法的签名必须符合某种格式

 

我们会注意到在用户控件的代码中我们定义的委托类型

public delegate void PageChangeHandler(object send, int nPageIndex);

 

定义一个事件给委托

public event PageChangeHandler OnPageChange;

(调用这个方法的时候用这样的语句:OnPageChange(sender, n);  ////调用委托

 

web页面的代码中定义一个方法

protected void PageNavigator1_PageChange(object sender, int PageIndex)

 

PageNavigator1_PageChange这个方法添加到委托的OnPageChange事件中

this.PageNavigator1.OnPageChange += new PageChangeHandler(PageNavigator1_PageChange);

 

你看:在定义委托的类型时候我们用的签名是(object send, int nPageIndex);

同时呢我们也看到了在向委托的事件添加方法时候的签名也是(object sender, int PageIndex)

而我们在调用事件的时候也是用的这个格式OnPageChange(sender, n);  n在这里是个正整数

你会不会想到这样一句话:

我们在建立委托类型的时候必须与要传递给委托的方法的签名(参数格式)相同,以及我们在调用控件的事件所用的格式也是与他相同的

 

我们现在对委托做一个总结:

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法

 

附录

 

用户控件代码见以上内容

程序web页部分代码:

 

public partial class manage_Sys_admin_group : NetCMS.Web.UI.ManagePage

{

    protected void Page_Load(object sender, EventArgs e)

    {

        this.PageNavigator1.OnPageChange += new PageChangeHandler(PageNavigator1_PageChange);

        if (!IsPostBack)

        {

           

            copyright.InnerHtml = CopyRight;                   //?¨???¨?§?

            Response.CacheControl = "no-cache";                        //?¨¨?°3?To??

            StartLoad(1);

        }

        string Type = Request.QueryString["Type"];  //¨???¨????¤¨¤¨?

        string ID = Request.QueryString["ID"];  //¨???¨¨°a¨??????¨?¤¨???ID

        switch (Type)

        {

            case "Del":             //??y¨?¤¨???

                this.Authority_Code = "Q018";

                this.CheckAdminAuthority();

                Del(NetCMS.Common.Input.checkID(ID));

                break;

            default:

                break;

        }

    }

 

    /// <summary>

    /// ¤?°3

    /// </summary>

    /// <returns>¤?°3</returns>

    ///  Code By DengXi   

   

    protected void PageNavigator1_PageChange(object sender, int PageIndex)

    {

        StartLoad(PageIndex);

    }

 

 

效果图:

 

 在用户控件中使用委托与事件调用自定义方法设计的分页控件 - 坚持下来的人! - 我只是一个人

  评论这张
 
阅读(461)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017