2009-09-24 15 views
5

वहाँ हैडर टेम्पलेट के भीतर एक डेटाबाउंड पुनरावर्तक के क्षेत्र हैडर नाम पहुंचने का एक तरीका है। तो इस के insted ....नेट पुनरावर्तक 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

eval ("फील्ड") संपत्ति करने के लिए शीर्ष लेख टेम्पलेट में एक अशक्त अपवाद फेंक कोशिश कर रहा है।।

मैं कुछ इस तरह करना होगा ...

कोड के पीछे

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

आप HeaderTemplate में <%# %> सिंटैक्स का उपयोग नहीं कर सकते क्योंकि आप इसे एक डेटा बाइंडिंग परिदृश्य में नहीं है। हालांकि आपको <%= %> का उपयोग करने में सक्षम होना चाहिए और फिर अपने पेज/उपयोगकर्ता नियंत्रण पर कुछ विधि डालें जो हेडर लौटाता है।

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> 

हालांकि यह थोड़ा बेकार है के बाद से शीर्ष लेख प्रत्येक पंक्ति (केवल पहली हालांकि दिखाया गया है) के लिए बाध्य किया जाएगा। शायद <% का उपयोग करना बेहतर होगा यदि पैनल के बजाय (...)%> लेकिन मुझे नहीं पता कि उस संदर्भ में कंटेनर। डिस्प्ले इंडेक्स का उपयोग कैसे करें।

संपादित करें:

.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

क्यों आप आइटम का उपयोग नहीं करते पहले से ही टाइप करें एफ 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

संबंधित मुद्दे