在写自定义控件时,如何做到事件冒泡?
比如:自定义控件时有一个DATAGRID,如何让DATAGRID的各个事件(ItemCommand,UpdateCommand等)上升到调用此控件的页面去处理?

解决方案 »

  1.   

    http://laiwen.cnblogs.com/archive/2005/08/05/207921.html
      

  2.   

    ItemCommand,UpdateCommand本来就是使用事件冒泡技术将DataGrid中的Button或LinkButton的点击事件冒泡到DataGrid的事件中,你要上升到页面去处理是什么意思呢?
      

  3.   

    呵呵,就是指我写的自定义控件 WebControl.ascx里有一个DataGrid ID为WebGrid,我现在要做的就是把WebGrid的ItemCommand事件冒泡到调用WebControl.ascx的页面(如:index.aspx)里面去处理,而不是在WebControl.ascx.cs里处理
      

  4.   

    沉了沉了,各位GDXM们,HELP ME PLEASE~~
      

  5.   

    你可以自己在用户控件中定义一个事件,象这样:public event  DataGridCommandEventHandler DgCommand;然后将这个事件和DataGrid的ItemCommand关联起来,象这样:void Page_Init(object src,EventArgs e){
    if(DgCommand!=null){
    grid1.ItemCommand+=new DataGridCommandEventHandler(DgCommand);
    }
    }然后在你的用户控件包含页(aspx)上注册用户控件:
    <%@Register TagPrefix="aa" Src="eventbubble.ascx" TagName="eb"%>用下面的方法将你定义的事件与事件处理程序关联起来:
    <aa:eb runat="server" OnDgCommand="testCommand"/>或者象.net框架文档的事件冒泡示例中那样重写用户控件OnBubbleEvent方法,在文档中用“事件冒泡”为关键字进行搜索应该可以找到该示例
      

  6.   

    在自定义里重写OnBubbleEvent就怎么写,我按那里的示例写了,可是在包含页中不能注册事件呀??
      

  7.   

    你的做法是对的。控件使用继承来的 RaiseBubbleEvent 方法 委派事件给父控件处理,父控件要从 OnBubbleEvent 中接过处理。你说“可是在包含页中不能注册事件呀”不知道具体是如何个不能注册法?
      

  8.   

    因为我在包含页中,自定义控件的类型是:
    System.Web.UI.UserControl UCGrid;
    那我在Init中是不是得这么写:UCGrid.EventCmd += new DataGridCommandEventHandler(DgCommand);
    这样写不行呀?
      

  9.   

    如果是模版的那种
    只需要传一个Command之类的可以用RaiseBubbleEvent 
    ,如果是特定的按钮你应该用这种UCGrid.EventCmd += new DataGridCommandEventHandler(DgCommand);-----
    因为我在包含页中,自定义控件的类型是:
    System.Web.UI.UserControl UCGrid;
    那我在Init中是不是得这么写:UCGrid.EventCmd += new DataGridCommandEventHandler(DgCommand);
    这样写不行呀?????
    怎么是UserControl ??你有没有自定义你的UserContronl的事件?并且是public 的
      

  10.   

    EventCmd ? 你不是说你使用 冒泡 OnBubbleEvent 么?OnBubbleEvent 的处理不需要注册。实际上 (我上面可能用于有错误)RaiseBubbleEvent 也不是事件,而是方法,它直接调用 parent 的 OnBubbleEvent 方法,只不过他们的参数定义以及委派处理方法太像事件了。但是他们不是事件机制。因此,你在控件的上级(包含者),只要覆盖 OnBubbleEvent 方法就能处理底下冒泡上来的请求。
      

  11.   

    楼主的意思是要给自己写的控件加事件,时间对应到控件里面的DataGrid的各个事件(ItemCommand,UpdateCommand等)。我的方法是,做成服务器控件,而不是用户控件。服务器控件可以继承DataGrid,这样我就不用特意处理事件的问题了。
      

  12.   

    想到一个简单的方法   不知道各位施主想到没有 在控件中可以访问到 Page属性,这个Page指的就是引用这个控件的页面 所以DATAGRID的事件中可以直接先用反射看Page是否有相关签名的方法,如果有就调用Page中的方法
      

  13.   

    lovelxj(伊斯人,吾谁与归) 想法不错哦