您的位置:首页 > 其它

【更正】“给自定义控件(Web Control)添加事件的几种方法”有一个不太准确的地方。

2008-07-15 05:26 399 查看
给自定义控件(Web Control)添加事件的几种方法。前两种方法可以不实现IPostBackEventHandler



上一篇写了一下如何在自定义控件里面添加事件,由简单的开始,一步一步实现了几种添加事件的方式,由于当时只给自定义控件添加了一种外部事件,测试的时候没有什么问题,但是后来在写分页控件的时候,我给分页控件加了两种外部事件,然后测试的时候就出现了一个问题,本来只想调用外部的一种事件,结果外部的两种事件都被调用了。分析了一下,

public event EventHandler myClick






{




add

{


Events.AddHandler(this, value);


}




remove

{


Events.RemoveHandler(this, value);


}


}

就是这个地方写错了,不能用 this,要单独定义一个 object才行。

由于上一篇只是一个简单的 demo,我又比较懒,就不去修改了,这里直接把分页控件的事件部分的代码写出来,供大家参考。




[Serializable]


public class PageArgs : EventArgs






{




/**//// <summary>


/// 翻页前的页号,不知道这个有没有用


/// </summary>


public Int32 OldPageIndex;






/**//// <summary>


/// 像要翻到的页号


/// </summary>


public Int32 CurrentPageIndex;





}




定义委托#region 定义委托




/**//// <summary>


/// 定一个委托,翻页的事件


/// </summary>


/// <param name="sender"></param>


/// <param name="e"></param>


public delegate void EventPageChange(Object sender, PageArgs e);






/**//// <summary>


/// 事件用


/// </summary>


protected static readonly object EventChange = new object();






/**//// <summary>


/// 事件用


/// </summary>


protected static readonly object EventBind = new object();




#endregion






定义事件#region 定义事件




/**//// <summary>


/// 用户单击页号后,触发的事件,在绑定显示数据的控件之前触发


/// </summary>


[Description("页号改变的时候触发")]


public event EventPageChange PageChanged






{


add






{


Events.AddHandler(EventChange, value);


}


remove






{


Events.RemoveHandler(EventChange, value);


}


}






/**//// <summary>


/// 用户单击页号后,并且绑定显示数据的控件之后触发


/// </summary>


[Description("在自动提取数据的方式下,绑定控件后触发")]


public event EventPageChange GridBinded






{


add






{


Events.AddHandler(EventBind, value);


}


remove






{


Events.RemoveHandler(EventBind, value);


}


}


#endregion






调用外部事件#region 调用外部事件




/**//// <summary>


/// 用户单击页号后,触发的事件,在绑定显示数据的控件之前触发


/// </summary>


/// <param name="sender"></param>


/// <param name="e"></param>


protected void OnPageChange(object sender, PageArgs e)






{


EventPageChange hd = (EventPageChange)base.Events[EventChange];


if (hd != null)


hd(sender, e);


}






/**//// <summary>


/// 绑定控件后触发


/// </summary>


/// <param name="sender"></param>


/// <param name="e"></param>


protected void OnGridBinded(object sender, PageArgs e)






{


EventPageChange hd = (EventPageChange)base.Events[EventBind];


if (hd != null)


hd(sender, e);


}


#endregion






分页控件的回发事件#region 分页控件的回发事件




/**//// <summary>


/// 分页控件的回发事件


/// </summary>


/// <param name="PageIndex">要翻到的页号</param>


public void RaisePostBackEvent(string PageIndex)






{


Int32 tmpPageIndex = 1; //不是数字,显示第一页


if (Functions.IsInt(PageIndex))


tmpPageIndex = Int32.Parse(PageIndex);




Pager_Click(tmpPageIndex);


}


#endregion






响应分页事件#region 响应分页事件




/**//// <summary>


/// 响应分页事件


/// </summary>


private void Pager_Click(Int32 tmpPageIndex)






{


//判断页号是否超出有效范围


if (tmpPageIndex < 0)


tmpPageIndex = 1;




if (tmpPageIndex > this.PageCount)


tmpPageIndex = this.PageCount;




//定义一个事件里的参数


PageArgs e = new PageArgs();


e.OldPageIndex = this.PageIndex;


e.CurrentPageIndex = tmpPageIndex;




this.PageIndex = tmpPageIndex;




//触发(调用)外部的事件


this.OnPageChange(this, e);




if (this.SetGetDataKind == myPageGetDataKind.Auto)






{


//自动提取数据的方式


//绑定控件


DataBind(tmpPageIndex);




//触发(调用)外部的事件


this.OnGridBinded(this, e);


}




//显示UI


this.ManagerPageUI.AddPageUI();


}


#endregion

【开源】QuickPager ASP.NET2.0分页控件V2.0.0.3 【增加了使用说明】

这里是分页控件的介绍和源码下载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐