Помогите с прослушиванием событий c # и usercontrols - PullRequest
0 голосов
/ 03 июня 2010

ОК, поэтому у меня есть страница со списком. Внутри шаблона элемента списка просмотра находится пользовательский контроль. Этот пользовательский контроль пытается вызвать событие, чтобы страница хостинга могла его прослушать. Моя проблема в том, что событие не запускается, так как обработчик имеет значение null. (т.е. EditDateRateSelected - мой обработчик и его нуль при отладке)

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

На границе элемента данных моего списка я добавляю свои обработчики событий

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);

Но, очевидно, мне нужно прослушивать события внутри списков управления.

Любой совет будет принят с благодарностью. Я попытался установить для EnableViewState значение true для моего списка, но это не имело значения. Есть ли где-то еще, где я должен подключить обработчик управления?

Примечание - извиняюсь за неправильную терминологию, и я называю делегатов обработчиками и т. Д.

1 Ответ

0 голосов
/ 04 июня 2010

ОК. Я попытался связать событие с моим пользовательским элементом управления в источнике следующим образом:

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

и обнаружил, что он жалуется на недоступность из-за уровня защиты. Хотя внутри моего usercontrol - я сделал свой делегат и событие публичным ???

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

Оказывается, что на моей хостинговой странице - мой обработчик событий не определил доступность (поэтому он был закрытым) - поэтому его нужно было защитить, и эй Престо был счастлив!

Проблема решена!

...