2009-06-16 36 views
1

ほとんどのデータバインドされたASP.NETコントロールのようなASP.NET ListViewコントロールには、奇数行と偶数行に対して異なるCSSクラスを描画するために使用できるAlternatingItemTemplateがあります。コントロールにはGroupTemplateもあり、アイテムをグループ化し、TRにグループ化されているTDの例3アイテムを表示できます。ただし、グループテンプレートは交替しません。私の質問は、GroupTemplateでtrのクラス属性をどのように置き換えるかです。基本的に私はTRに3つのアイテムを持ち、奇数と偶数TRに交互にスタイルを入れたいと思っています。ASP.NET ListView交互のグループ

データバインディング式を別のデータバインディングコントロールにネストすることを避けたいと思います。データバインディング式<%# Alternate() %>でTRのクラスをバインドしようとしましたが、データバインディング式はitemtemplateでのみ呼び出されます(明らかに、 databindイベントであり、グループテンプレートに呼び出されません)

アイデア?

例コード:

まず
<asp:ListView ID="lv1" runat="server" EnableViewState="false" GroupItemCount="3"> 
    <LayoutTemplate> 
     <table class="asd"> 
      <asp:PlaceHolder ID="groupPlaceholder" runat="server"></asp:PlaceHolder> 
     </table> 
    </LayoutTemplate> 
    <GroupTemplate> 
     <tr class='<%# GetAlternatingCssClass() %>'> 
      <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder> 
     </tr> 
    </GroupTemplate> 
    <ItemTemplate> 
     <td> 
      <asp:HyperLink runat="server" NavigateUrl='<%# Eval("Url") %>'> <%# Eval("Text") %> </asp:HyperLink> 
     </td> 
    </ItemTemplate> 
</asp:ListView> 

答えて

1

:それはページが処理される時点では、ない要素がアクセスされるたびの評価を行っていますよう

<GroupTemplate> 
    <tr class='<%# GetAlternatingCssClass() %>'> 
     <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder> 
    </tr> 
</GroupTemplate> 

だけListViewコントロールのために一度評価を取得します。これを意図して実装するには、ListViewがGroupItemCountに基づいてクラスを代入するためのRenderメソッドをオーバーライドする必要があると思います。私はこれをコード化していないので、これは仮定です。

GroupTemplateは、各項目が自己完結型要素、つまり完全な製品リストであり、項目と行が接続されていない種類のフローレイアウトを提供することを目的としています(行内のセルレコードのフィールド)。このように、行の色はデータの表現に役立つものではありませんが、純粋に魅力的です(この方法で識別された別のレコードを見ているユーザーにとって混乱を招く可能性があり、実際には存在しないデータ関係について推論する可能性があります) 。

あなたは基本的なListViewから必要なものを得るために多くの作業をしなければならないと思いますが、私は自分自身に尋ねる最初の質問は、これがなぜ必要なのか、それはユーザー要件か、 (それはそれ自体が間違っているものではありませんが、コントロールは美的ではなく機能のために設計されています)。ユーザーの要件でない場合は、これを解決するための費用を負担しますか?

+0

実際、プロジェクトのどこでも使用できるテーブルのテンプレートコントロールを作成したいと思います。私はコードで簡単にこれを行うことができますが、私はデザイナーがC#コードを見ずにコントロールを変更してスクリプトなどを添付できるようにしたいので、ListViewを使う予定です。私はおそらくコントロールにDataPagerをラップします。ほとんどの場合、テーブルをUpdatePanelでラップし、ajax呼び出しのロード通知を行います。コントロール全体を最初から作成するのではなく、ASP.NETコントロールを使用してその機能を公開する方が簡単になるようです。私が間違っている? – Stilgar

+0

標準のASP.NETコントロールを使用してユーザーコントロールを作成し、いくつかのプロパティを公開して提供することができます。それはあなたが探しているものを提供するかもしれません。 – Lazarus