2009-03-23 10 views
2

私はGroupTemplateを使って項目のリストをグループに分けたいと思っています。しかし、私は各グループに順番に番号を付ける必要があるので、私はそれらにリンクしてJSページングを実装することができます。私はIEnumerableにバインドしていますGroupTemplateまたはItemTemplateに番号を付けることはできますか?

ここにいくつかの疑似コードがあります。私は、出力は次のようになりたいと思います:

<a href="#group1">Go to Group 1<a> 
<a href="#group2">Go to Group 2<a> 
<a href="#group3">Go to Group 3<a> 

<ul id="group1"> 
    <li>Item</li> 
    <li>Item</li> 
    <li>Item</li> 
</ul> 
<ul id="group2"> 
    <li>Item</li> 
    <li>Item</li> 
    <li>Item</li> 
</ul> 
<ul id="group3"> 
    <li>Item</li> 
    <li>Item</li> 
    <li>Item</li> 
</ul> 

はGroupTemplateとItemTemplateにを使用して、リストビューで行うのは、この使いやすいですか?

<asp:ListView ID="lv" runat="server" GroupPlaceholderID="groupPlaceholder"> 
    <LayoutTemplate> 
     <asp:PlaceHolder ID="groupPlaceholder" runat="server"></asp:PlaceHolder> 
    </LayoutTemplate> 
    <GroupTemplate> 
     <ul id="<!-- group-n goes here -->"> 
      <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder> 
     </ul> 
    </GroupTemplate> 
    <ItemTemplate> 
     <li>Item</li> 
    </ItemTemplate> 
</asp:ListView> 

私は、データソースとの基本的な数学の一番上にあるリンクを行うためにグループの数を得ることができますが、どのように私はテンプレートにID =「もしgroupN」数を得るのですか?

あなたのaspxファイルで
+0

? – Kiquenet

答えて

4

:背後にあるあなたのコードで

<GroupTemplate> 
    <ul id='<%# "group"+GroupNumber %>'> 
    <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder> 
    </ul> 
</GroupTemplate> 

(C#のを想定)隠しフィールド、JQueryでそれらをカウントするか、CssClassを使用します。 Container.DataItemIndexを使用して番号を取得することができます。

編集:ちょうどulをrunat = "server"に変更することで、ASP.NETは悪名高いINamingContainer形式の一意のIDを生成します。これにはインデックスも含まれますが、それはlv_ctrl0_groupのようなものになりますが、実装の詳細です。

ulのInitイベントにハンドラをフックし、数字を追加してlv_ctrl0_group1のようなものにすることができます。私はあなたが前もって付けられたINamingContainerのものを非常に簡単に取り除くことができるとは思わない、そして、これはおそらく任意のIPostDataHandlerコントロールを破るだろう。

<script runat="server"> 
    void Group_Init(object sender, EventArgs e) { 
     ((Control)sender).ID += groupId++.ToString(); 
    } 
    int groupId = 0; 
</script> 

<asp:ListView id="lv" runat="server" GroupItemCount="3"> 
    <LayoutTemplate> 
     <asp:PlaceHolder ID="groupPlaceHolder" runat="server" /> 
    </LayoutTemplate> 
    <GroupTemplate> 
     <ul id="group" runat="server" oninit="Group_Init"> 
      <asp:PlaceHolder ID="itemPlaceHolder" runat="server"/> 
     </ul> 
    </GroupTemplate> 
    <ItemTemplate> 
     <li>Item</li> 
    </ItemTemplate> 
</asp:ListView> 
+0

さて、私はjQueryですべてをやってみることを考えていましたが、必要な数ではありません。私はグループごとに固有のIDが必要です。上記のリンクがこれらのIDを参照する(アクセシビリティやページはめ込みリンクの場合)ため、クラスを使用できません Container.DataItemIndexは良い考えです。 – Armstrongest

+0

ええ、私はこのようにすることを考えていました。私は好ましくはIDの名前を管理したいと思います。同じページのリンクをコーディングする方が簡単です。私は、Pagelinks&IDを取るJQueryのUIタブCtrlを使用して、それぞれTab-headとTab-bodyに変換します。だから、私はそれらのIDを確実に参照する必要があります。 – Armstrongest

+0

私はUIのタブCtrlの詳細に精通していませんが、JQueryを使用して、特定のクラスのULを探したり、IDに "group"を含むIDを動的に見つけることができるはずです。 –

1

:私はあなたがIDをデータバインドすることができるとは思わないので、私はどちらかの使用、おそらく思い

int _GroupNumber=0; 

protected string GroupNumber 
{ 
    get { return (++_GroupNumber).ToString(); } 
} 
+0

グレートシンプルなソリューションとそれがうまくいけばうまくいくでしょう。しかし、GroupPropertyはListViewから呼び出されることはありません。 – Armstrongest

+0

ハッ。データバインディングプロセスの一部であってはなりません。 <%# "group" + GroupNumber%>はどうですか? – Keltex

+0

GroupTemplateをdatabindしていないことがわかりました。残念ながら、実際には動作しません。データをリストのリストに分割したり、ネストされたListViewを実行したりしないようにしようとしています。私はIDが必要です。 – Armstrongest

1

上記のKeltexのソリューションは、わずかな変更で動作します。 <%を使用=代わり<%#

GroupTemplateはデータバインディングのサポートをdoesntのため、#が働くwouldntの<%

SQLおよびグループフィールドがある
関連する問題