2009-09-24 3 views
5

ヘッダーテンプレート内のデータバインドされたリピーターのフィールドヘッダー名にアクセスする方法はありますか。だから、それはデータバインディングのシナリオではないので、あなたはHeaderTemplateに<%# %>構文を使用することはできません.NET Repeater HeaderTemplate

     <HeaderTemplate> 
          <table > 
           <th ></th> 
           <th >Forename</th> 
           <th >Surname</th> 
           <th >work email</th> 
           <th ></th> 
         </HeaderTemplate> 

    We get something like this.     

         <HeaderTemplate> 
          <table > 
           <th ></th> 
           <th ><%# Eval("Forename").HeaderName%></th> 
           <th ><%# Eval("SureName").HeaderName%></th> 
           <th ><%# Eval("WorkEmail").HeaderName%></th> 
           <th ></th> 
         </HeaderTemplate> 

答えて

7

評価( "フィールド")をやろうとしているヘッダテンプレートのプロパティがnull例外をスローします。私はこのような何かをするだろう

...

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     List<SomeData> data = new List<SomeData>(); 

     data.Add(new SomeData("Bob")); 
     data.Add(new SomeData("Joe")); 

     Repeater1.DataSource = data; 
     Repeater1.DataBind(); 
    } 

    public String FirstnameColumn { 
     get { return "Firstname"; } 
    } 
} 

public class SomeData 
{ 
    public String Firstname { get; set; } 

    public SomeData(String firstname) { 
     this.Firstname = firstname; 
    } 
} 

マークアップの後ろ

コードは

<table> 
    <asp:Repeater ID="Repeater1" runat="server"> 
     <HeaderTemplate> 
      <tr><td><%= FirstnameColumn %></td></tr> 
     </HeaderTemplate> 
     <ItemTemplate> 
      <tr><td><%# Eval("Firstname") %></td></tr> 
     </ItemTemplate> 
    </asp:Repeater>   
</table> 
3

....これでinsted。しかし、<%= %>を使用し、ヘッダーを返すあなたのページ/ユーザコントロールにいくつかのメソッドを置くことができるはずです。

4

このようなあなたのItemTemplateににテーブルヘッダを移動することができ:

<ItemTemplate> 
    <asp:Panel runat="server" Visible='<%# Container.DisplayIndex == 0 %>'> 
     <tr> 
      <th><%# Eval("Forename").HeaderName %></th> 
     </tr> 
    </asp:Panel> 
    <tr> 
     <td><%# Eval("Forename") %></td> 
    </tr> 
</ItemTemplate> 

ヘッダは行ごとに結合されるので、これはわずかに無駄であるが(最初ただし示されています)。おそらく、Panelの代わりに<%if(...)%>を使用する方が良いでしょうが、そのコンテキストでContainer.DisplayIndexにアクセスする方法がわかりません。

編集:.NET 4.5 Container.DisplayIndex

は動作しません。 Container.ItemIndexと置き換えてください。

全例:

<ItemTemplate> 
    <asp:Panel runat="server" Visible='<%# Container.ItemIndex == 0 %>'> 
     <tr> 
      <th><%# Eval("Forename").HeaderName %></th> 
     </tr> 
    </asp:Panel> 
    <tr> 
     <td><%# Eval("Forename") %></td> 
    </tr> 
</ItemTemplate> 
1

は、なぜあなたは項目を使用しませんタイプはすでにf RepeaterEventsでound?

protected void rptContent_DataBound(object Sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Header) 
     { 
      var x= e.Item.FindControl("xxx") as Label; 
      ... 
     } 
    } 
+0

これは私が探していた情報でした。ありがとう! – Oliver

関連する問題