私は、<itemtemplate/>
の別の行のdivにcssクラスを追加するだけで、完全な<alternatingitemtemplate/>
を含むオーバーヘッドに行かず、多くのマークアップを保持することを強制しようとしています。将来的に同期します。
http://blog.net-tutorials.com/2009/04/02/how-to-alternate-row-color-with-the-aspnet-repeater-control/などのソリューションを見ました 私は使用したいと思っていますが、これはまだ私にとって「臭い」ではありません。
他の誰かがより保守可能で簡単なソリューションを手に入れましたか?理想的には、次のようなことができるようにしたいと思います。
<asp:repeater id="repeaterOptions" runat="server">
<headertemplate>
<div class="divtable">
<h2>Other Options</h2>
</headertemplate>
<itemtemplate>
<div class="item <%# IsAlternatingRow ? "dark" : "light" %>">
しかし、拡張メソッドを使用しても、IsAlternatingRow
の実装方法がわかりません。
独自の変数(増分カウンターまたはブール値)を管理する必要はありません。組み込みの ItemIndex
プロパティが2で割り切れるかどうかを確認し、それを使用してcssクラスを設定します。
class="<%# Container.ItemIndex % 2 == 0 ? "" : "alternate" %>"
これには、UIコード(ascxまたはaspxファイル)に完全に基づいているという利点があり、JavaScriptに依存しません。
C#
class="<%# Container.ItemIndex % 2 == 0 ? "" : "alternate" %>"
VB
class="<%# iif(Container.ItemIndex Mod 2 = 0,"","alternate") %>"
これは私を助けました
class='<%# Container.ItemIndex % 2 == 0 ? "" : "alternate" %>'
以前の回答では、「サーバータグの形式が正しくありません」エラーが発生しました。
JQueryでクラスを適用します。
$('.divtable > div:odd').addClass('dark');
$('.divtable > div:even').addClass('light');
Little Tweak:空のクラスは次のようなもので削除できます:
<%# Container.ItemIndex % 2 == 0 ? "<tr>" : "<tr class='odd'>" %>
代わりにjQueryを使用できます。前の質問に対する次の回答が役立つ場合があります。 jQuery Zebra selector
コードは不要です。これが純粋なCSSソリューションです。
.item:nth-child(odd){background-color: #ccc}
.item:nth-child(){background-color: #ddd}
IsAlternatingRowは保護されたプロパティにすることができ、ItemDataBoundまたはItemCreatedイベントで設定されます。
protected void rpt_ItemDataBound(object sender, EventArgs e)
{
IsAlternatingRow = !IsAlternatingRow;
}