0

OK、リストビューのあるページがあります。リストビューのアイテムテンプレート内には、ユーザーコントロールがあります。このユーザーコントロールは、ホスティングページがイベントをリッスンできるようにイベントをトリガーしようとしています。私の問題は、ハンドラーが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内のイベントをリッスンする必要があります。

アドバイスをいただければ幸いです。リストビューに対してEnableViewStateをtrueに設定しようとしましたが、違いはありません。コントロールハンドラーを配線することになっている他の場所はありますか?

注-用語が間違っていて、デリゲートをハンドラーなどと呼んでいる場合は、お詫びします:)

4

1 に答える 1

0

OK私は次のようにソースのユーザーコントロールにイベントを配線してみました:

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

そして、保護レベルが原因でアクセスできないことについて不平を言っていることがわかりました。ただし、ユーザーコントロールの内部では、デリゲートとイベントを公開しました。

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

私のホスティングページ内で-私のイベントハンドラーにはアクセス可能性が定義されていなかった(つまりプライベートでした)-それで保護する必要があり、ちょっとプレストは幸せでした!

問題が解決しました!

于 2010-06-04T04:36:35.130 に答える