asp.net2.0 控件开发(学习笔记之三)

        一、回传事件
        控件必须实现IPostBackEventHandler接口
        1、必须实现事件委托,例如:
       
         private static readonly object ClickKey = new object();

        public event EventHandler Click
        {
                add
                {
                    Events.AddHandler(ClickKey, value);
                 }
                remove
                {
                    Events.RemoveHandler(ClickKey, value);
                }
        }
        
        2、通过RaisePostBackEvent 方法处理回发事件,使服务器控件能够处理将窗体发送到服务器时引发的事件。
        public void RaisePostBackEvent(string eventArgument)
        {
            OnClick(EventArgs.Empty);
        }
        其中EventArgs.Empty表示没有事件数据的事件(本人理解是相对数据回传事件而言)。EventArgs.Empty等同于EventArgs类的构造函数,等同于new EventArgs()。
        3、实现事件处理程序
        protected virtual void OnClick(EventArgs e)
        {
             EventHandler clickEventDelegate =(EventHandler)Events[ClickKey];
            if (clickEventDelegate != null)
            {
                    clickEventDelegate(this, e);
            }
        }
        4、将引发回传的控件的name属性值设置UniqueID
        protected override void Render(HtmlTextWriter output)
        {
                 output.Write("<INPUT TYPE=submit name=" + this.UniqueID +  " Value='确定' />");
        }
        二.数据回发事件
        必须实现IPostBackDataHandler 接口。.IPostBackDataHandler接口用于在创建需要由客户端回传到服务器的窗体数据的服务器控件时使用。
        1、必须实现LoadPostData方法
        LoadPostData方法用来检查提交给服务器的数据。该方法包含两个参数:postDataKey表示用于识别控件内数据的关键值,postData是提交数据的集合,其采用Key/Value结构便于使用索引名称访问。在LoadPostData方法中,通过新数据(客户端发送的数据值)与旧数据(先前提交给客户端的数据值)进行比较的结果来确定方法返回值。如果新旧数据相同,则说明数据没有被修改,方法返回值为false;如果新旧数据不同,则表明旧数据已经被客户端修改,方法返回值true。

      public bool LoadPostData(string postDataKey,NameValueCollection postCollection)
    {
            string postedValue = postCollection[postDataKey];
            //检查新旧数据
            if (!Text.Equals(postedValue))
            {
                Text = postedValue;
                return true;
                //自动调用RaisePostDataChangedEvent()
            }
            return false;
            //不发生变化
    }
        2、RaisePostDataChangedEvent
        当上面LoadPostData返回True,则会调用RaisePostDataChangedEvent
        public void RaisePostDataChangedEvent()
        
{
            OnTextChanged(EventArgs.Empty);
        }
        3、数据回发同样也要进行事件委托,以及定义回传的控件的name属性值为UniqueID

        参考:http://www.cnblogs.com/Clingingboy/archive/2006/08/02/466180.html

posted on 2007-09-03 07:42  蔡继文  阅读(151)  评论(0)    收藏  举报

导航