AlternativeItemTemlateを手動で設定する方法はありますか?私はこの質問に何度も苦しんだ。
最後のアイテムだけに使いたいです。たぶんItemDataBound
イベントは解決策になるかもしれませんが、私は理解できません。
私が見つけた唯一の有用な質問:
AlternativeItemTemlateを手動で設定する方法はありますか?私はこの質問に何度も苦しんだ。
最後のアイテムだけに使いたいです。たぶんItemDataBound
イベントは解決策になるかもしれませんが、私は理解できません。
私が見つけた唯一の有用な質問:
これ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;
}
}