リピータの最後の反復でasp.netリピータで別のテンプレートを検出または使用できますか?asp.netリピータの最後の反復処理を別の方法で処理する
私はちょうどforループを使うことができますが、できれば私は好奇心が強いです。
リピータの最後の反復でasp.netリピータで別のテンプレートを検出または使用できますか?asp.netリピータの最後の反復処理を別の方法で処理する
私はちょうどforループを使うことができますが、できれば私は好奇心が強いです。
期待しているアイテムの数がわかっている場合は、最後のアイテムであるかどうかをe.Item.ItemIndexプロパティで確認できます。または、何をしようとしているかに応じて、フッターテンプレートを利用できるかもしれません。
時々、私はItemTemplatesにPlaceHolderインスタンスを使用してこれを行います。すなわち:私のItemDataBound方法で次に
protected int _bindCtr = 0;
:
protected void MyItemDataBound(object sender, RepeaterItemEventArgs args)
{
if (args.Item.ItemType == ListItemType.AlternatingItem ||
args.Item.ItemType == ListItemType.Item)
{
++this._bindCtr;
this.phIsLastOne.Visible = this._bindCtr == this._dataSource.Count;
this.phIsNotLastOne.Visible = this._bindCtr < this._dataSource.Count;
}
}
よりか、私は通常、保護されたクラスのメンバーとして私のクラスでOnItemDataBoundカウンターを追跡するための変数を持っている
<ItemTemplate>
<asp:PlaceHolder id="phIsNotLastOne" runat="server">Is not last</asp:PlaceHolder>
<asp:PlaceHolder id="phIsLastOne" runat="server">Is last</asp:PlaceHolder>
</ItemTemplate>
もっと少なく。データソースを評価可能にして、バインディングする前にカウンターを0に設定してください。
上記のアプローチに対して、提案されているようにItemIndexを見る方が良いでしょう。 また、Repeater型には厳密に型指定されていないが、データソースへの参照を持つDataSourceプロパティがあります。
もう1つのオプションは、リピーターにバインドされているアイテムの数を保持するローカル変数を作成することです。
あなたはOnItemDataBoundイベントの中にいるときに現在の項目のインデックス(e.Item.ItemIndex)は、カウントに等しい場合次に、チェック - 1(必要性を-1アイテムインデックスが0基づいている)
..だから
if (e.Item.ItemIndex == (repeaterItemCount - 1))
{
// Work on last item here...
}
このようにして直接行うことができます。次のコードでは、最後の項目に「Last」クラスが適用されます。それに応じてスタイリングを適用することができます。
<asp:Repeater ID="rptrMainContent" runat="server">
<ItemTemplate>
<li class="<%#Container.ItemIndex==(rptrMainContent.DataSource as IList).Count-1?"Last":"" %>">
some text
</li>
</ItemTemplate>
</asp:Repeater>
同様のソリューションでContainer.Parentを使用する場合は、https://stackoverflow.com/a/9742857/2340825を参照してください。 –