代码之家  ›  专栏  ›  技术社区  ›  Jen

C事件监听和用户控件帮助

  •  0
  • Jen  · 技术社区  · 16 年前

    好的,我有一个页面,上面有一个列表视图。在ListView的项模板中有一个用户控件。此用户控件正试图触发一个事件,以便宿主页可以侦听该事件。我的问题是该事件不会被触发,因为处理程序为空。(即,EditDateRateselected是我的处理程序,调试时为空)

       protected void lnkEditDate_Click(object sender, EventArgs e)
        {
                if (EditDateRateSelected != null)
                EditDateRateSelected(Convert.ToDateTime(((LinkButton)frmViewRatesDate.Row.FindControl("lnkEditDate")).Text)); 
        }
    

    在listvew的项数据绑定上,我正在添加事件处理程序

    protected void PropertyAccommodationRates1_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        if (e.Item.ItemType == ListViewItemType.DataItem)
        {
            UserControls_RatesEditDate RatesViewDate1 = (UserControls_RatesEditDate)e.Item.FindControl("RatesViewDate1");
            RatesViewDate1.EditDateRateSelected += new UserControls_RatesEditDate.EditDateRateEventHandler(RatesEditDate1_EditDateRateSelected);
    
            RatesViewDate1.PropertyID = (int)Master.PropertyId;
            if (!String.IsNullOrEmpty(Accommodations1.SelectedValue))
            {
                RatesViewDate1.AccommodationTypeID = Convert.ToInt32(Accommodations1.SelectedValue);
            }
            else
            {
                RatesViewDate1.AccommodationTypeID = 0;
            }
    
            RatesViewDate1.Rate = (PropertyCMSRate)((ListViewDataItem)e.Item).DataItem;
        }
    }
    

    如果控件在页面内,并且在页面加载时我有行,则我的事件代码都可以正常工作:

    RatesEditDate1.EditDateRateSelected += new UserControls_RatesEditDate.EditDateRateEventHandler(RatesEditDate1_EditDateRateSelected);
    

    但显然,我需要监听ListViewControls中的事件。

    任何建议都将不胜感激。我已经尝试为我的ListView将EnableViewState设置为true,但这并没有起到什么作用。是否还有其他地方需要连接控制处理器?

    注意-如果我的术语有误,并且我将代理称为处理程序之类的话,请道歉:)

    1 回复  |  直到 16 年前
        1
  •  0
  •   Jen    16 年前

    好的,我尝试将事件连接到源代码中的用户控件,如下所示:

    <uc1:RatesEditDate ID="RatesViewDate1" runat="server" OnEditDateRateSelected="RatesEditDate1_EditDateRateSelected" /> 
    

    然后发现它抱怨因为它的保护级别而无法访问。但是,在我的用户控件中-我已经公开了我的委托和事件????

    public delegate void EditDateRateEventHandler(DateTime theDateTime); 
    public event EditDateRateEventHandler EditDateRateSelected; 
    

    结果发现在我的宿主页面中——我的事件处理程序没有定义可访问性(所以是私有的)——所以它需要被保护,嘿,普雷斯托很高兴!

    问题解决了!