从转发器内的用户控制中提升事件

时间:2012-12-08 20:49:52

标签: c# asp.net events repeater

我有一个用户控件来引发一个事件,我想在其他地方捕获。

在aspx中我有;

<asp:Repeater runat="server" ID="rptMarcas" OnItemDataBound="rptMarcas_OnItemDataBound">
    <ItemTemplate>
         <uc1:FabricanteArbol runat="server" ID="treeMarca"/>
    </ItemTemplate>
</asp:Repeater>

在aspx.cs中

protected void rptMarcas_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Albero_dll.FABRICANTES fab = (Albero_dll.FABRICANTES)e.Item.DataItem;

        App_Componentes_FabricanteArbol tree = (App_Componentes_FabricanteArbol)e.Item.FindControl("treeMarca");
        tree.cargar(fab);
        tree.OnSelectedNodeClicked += new EventHandler(OnSelectedNodeClicked);
    }
}

在用户控件中;

public event EventHandler OnSelectedNodeClicked;
if (OnSelectedNodeClicked != null)
{
    CatalogoChangedEventArgs eCat = new CatalogoChangedEventArgs(e, SesionManager.posCatalogo, irPagina);
    OnSelectedNodeClicked(this, eCat);
}

但始终OnSelectedNodeClicked为空。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我看到了这个问题,但我需要你解决一些问题或告诉我确切的背景。

Albero_dll.FABRICANTES fab = (Albero_dll.FABRICANTES)e.Item.DataItem;

e.item.dataitem将是您的usercontrol的实例,因此Albero_dll.FABRICANTES应替换为您的用户控件名称。

App_Componentes_FabricanteArbol tree =(App_Componentes_FabricanteArbol)e.Item.FindControl(“treeMarca”);是错的,不会起作用