帮助c#事件监听和用户控制

时间:2010-06-03 03:12:21

标签: c# asp.net events delegation

好的,我有一个页面,上面有一个列表视图。列表视图的项模板内部是一个usercontrol。此用户控件正在尝试触发事件,以便托管页面可以侦听它。我的问题是,由于处理程序为null,因此未触发事件。 (即,EditDateRateSelected是我的处理程序,调试时为null)

   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 个答案:

答案 0 :(得分:0)

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

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

然后发现它抱怨由于其保护级别而无法访问。在我的usercontrol里面 - 我已经让我的委托和事件公开???

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

事实证明,在我的托管页面中 - 我的事件处理程序没有定义任何可访问性(因此是私有的) - 所以它需要被保护并且嘿presto很高兴!

问题解决了!