0

親子関係を持つ 3 つのリピーターがあり (つまり、親リピーター、子リピーター、子-子リピーターがあります)、最も内側のリピーターはトリガーされません。レイアウト用の私のaspxページは次のとおりです。

<asp:Repeater ID="rptMission" runat="server">
<HeaderTemplate>
<ul id="acc1" class="ui-accordion-container">
</HeaderTemplate>
    <ItemTemplate>
<li>
    <div class="ui-accordion-left"></div>
    <a class="ui-accordion-link acc1"><%# Eval("Name") %><span class="ui-accordion-right"></span></a>
    <div>
        <ul class="ui-accordion-container" id="acc2">
        <asp:Repeater ID="rptActivity" runat="server">
        <ItemTemplate>
            <li>
                <div class="ui-accordion-left"></div>
                <a class="ui-accordion-link acc2"><%# Eval("Name") %>
                <span class="ui-accordion-right"></span></a>
                <div>
                <asp:Repeater ID="rptProject" runat="server">
                <ItemTemplate>
                    <%# Eval("Name") %><br/>
                </ItemTemplate>
                </asp:Repeater>
                </div>
            </li>
        </ItemTemplate>
        </asp:Repeater>
        </ul>
    </div>
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>

上位 2 つのリピーターはうまく機能しますが、「rptProject」リピーターはトリガーされません。これが私のコードビハインドです:

protected void Page_Load(object sender, EventArgs e)
    {
        _presenter = new TierTypesPresenter(this);
        rptMission.ItemDataBound += new RepeaterItemEventHandler(rptMission_ItemDataBound);

        RaiseStartUp();
    }

    void rptMission_ItemDataBound(Object sender, RepeaterItemEventArgs e)
    {
        RepeaterItem item = e.Item;
        Mission row = (Mission)item.DataItem;
        if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
        {
            var rptActivity = (Repeater)item.FindControl("rptActivity");
            var activity = _presenter.GetActivitiesByMission(row.Id);
            rptActivity.DataSource = activity;
            rptActivity.DataBind();
        }
    }

    void rptActivity_ItemDataBound(Object sender, RepeaterItemEventArgs e)
    {
        RepeaterItem item = e.Item;
        Activity row = (Activity)item.DataItem;
        if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
        {
            var rptProject = (Repeater)item.FindControl("rptProject");
            var project = _presenter.GetProjectsByActivities(row.Id);
            rptProject.DataSource = project;
            rptProject.DataBind();
        }
    }

    public void SetMissions(IEnumerable<Mission> missionList)
    {
        rptMission.DataSource = missionList;
        rptMission.DataBind();
    }

2 番目の ItemDataBound イベント 'rptActivity_ItemDataBound' をトリガーできれば、問題なく動作すると思いますが、スキップされます。洞察をありがとう!

4

2 に答える 2

1

次のコード行が欠落していると思います。

rptActivity .ItemDataBound += new RepeaterItemEventHandler(rptActivity_ItemDataBound);

ちなみに、aspファイルにイベントを設定する方が簡単です...

于 2012-11-27T12:54:33.217 に答える