好的,我有一个页面,上面有一个列表视图。列表视图的项模板内部是一个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,但这并没有什么不同。是否有其他地方我应该连接控制处理程序?
注意 - 如果我的术语错误而且我将代表称为处理程序,那么道歉......
答案 0 :(得分:0)
好的,我尝试将事件连接到源中的用户控件,如下所示:
<uc1:RatesEditDate ID="RatesViewDate1" runat="server" OnEditDateRateSelected="RatesEditDate1_EditDateRateSelected" />
然后发现它抱怨由于其保护级别而无法访问。在我的usercontrol里面 - 我已经让我的委托和事件公开???
public delegate void EditDateRateEventHandler(DateTime theDateTime);
public event EditDateRateEventHandler EditDateRateSelected;
事实证明,在我的托管页面中 - 我的事件处理程序没有定义任何可访问性(因此是私有的) - 所以它需要被保护并且嘿presto很高兴!
问题解决了!