1

AlternativeItemTemlateを手動で設定する方法はありますか?私はこの質問に何度も苦しんだ。

最後のアイテムだけに使いたいです。たぶんItemDataBoundイベントは解決策になるかもしれませんが、私は理解できません。

私が見つけた唯一の有用な質問:

4

1 に答える 1

1

これItemDataBoundは確かに可能なオプションですが、それが機能するためには、リピーターアイテムの総数が必要になるため、最後のアイテムを識別できます。

protected void rptDummy_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
    int itemsCount = ((List<SomeClass>)rptDummy.DataSource).Count;

    if (e.Item.ItemType == ListItemType.Item)
    { 
        if(e.Item.ItemIndex == itemsCount - 1)
        {
            //Do Things here
        }
    }
}

同じテンプレート内に2つのプレースホルダーを含めることもできます。1つは最後のアイテム専用です。

<ItemTemplate>
    <asp:PlaceHolder id="phIsNotLastOne" runat="server">Is not last</asp:PlaceHolder>
    <asp:PlaceHolder id="phIsLastOne" runat="server">Is last</asp:PlaceHolder>
</ItemTemplate>

次に、次のようなことを行うことができます。

protected void rptDummy_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
    long itemsCount = ((List<SomeClass>)rptDummy.DataSource).Count;

    if (e.Item.ItemType == ListItemType.Item)
    { 
        PlaceHolder phIsLastOne = (PlaceHolder)e.Item.FindControl("phIsLastOne");
        PlaceHolder phIsNotLastOne = (PlaceHolder)e.Item.FindControl("phIsNotLastOne");
        phIsLastOne.Visible = e.Item.ItemIndex == itemsCount - 1;
        phIsNotLastOne.Visible = !this.phIsLastOne.Visible;
    }
}
于 2013-02-24T10:01:14.660 に答える