2012-12-03 51 views
0

訪問一個傳奇的標籤,我有以下數據綁定repeater代碼:如何從代碼

<%--categories--%> 
<asp:Repeater ID="CategoryRepeater" runat="server" OnItemDataBound="ItemBound"> 
    <ItemTemplate> 
     <div class="groupbox"> 
      <fieldset> 
       <legend><%# Container.DataItem %></legend> 
       <table> 
        <asp:Repeater ID="ItemRepeater" runat="server"> 
        <ItemTemplate> 
         <tr> 
         <td> 
          <asp:CheckBox id="chkItem" runat="server" Text='<%# Eval("Text")%>' /> 
          <asp:HiddenField id="pgNos" runat="server" Value='<%# Eval("PGNos")%>' /> 
          <asp:Button ID="btnXRefs" Text="x-refs" runat="server" CssClass="xRefButton" OnClick="btnSelectXRefs_Click" /> 
         </td> 
         </tr> 
        </ItemTemplate> 
        </asp:Repeater> 
       </table> 
      </fieldset> 
     </div> 
    </ItemTemplate> 
</asp:Repeater> 

有一個repeaterrepeater。我如何從代碼中訪問legend<legend><%# Container.DataItem %></legend>)中的文本?

我想:

foreach (RepeaterItem cr in CategoryRepeater.Items) 
{ 
string heading = (string) cr.DataItem; // returns null 
} 
+1

這是類似的東西http://stackoverflow.com/questions/3770143/adding-text-to-legend-from-code-behind – Amitd

+0

或者您可以使用HeaderTemplate中http://msdn.microsoft.com /en-us/library/system.web.ui.webcontrols.repeater.headertemplate.aspx – Amitd

+0

你想從哪裏訪問它?例如,btnSelectXRefs_Click或ItemBound – Win

回答

1

您使用的傳奇標籤是不是在服務器端可見。是客戶端控件而不是服務器控件。

試試這個:

<legend id="myLegend" runat="server"><%# Container.DataItem %></legend> 

然後在代碼隱藏:

protected void ItemBound(Object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.DataItem == null) return; 
     HtmlGenerics body = (HtmlGenerics)e.Item.FindControl("myLegend"); 
     body.InnerText = "Foo"; 
    } 
+1

我做了 - var fileName =((HtmlGenericControl)cr.FindControl(「heading」))。InnerText; – sprocket12

2

的Container.DataItem對於DataItem的運行時別名在綁定列表這個特定項目。對於中繼,顯示10行數據,這是從數據源一行...基本上,這是一個具體的行和在運行時,你可以從該行獲得的屬性值

我看到你上面馬克Up ...好像你缺少像下面提到的數據綁定類型的屬性。

<%# ((Your Class Name)Container.DataItem).Class Property Name %> 

有一箇中繼器內的中繼器。如何從代碼訪問 圖例(<%#Container.DataItem%>)中的文本?

至於說通過phemt.latd,您可以更改傳奇標籤到服務器端控制像下面。

<legend id="lg" runat="server"> 
     <%# ((Your Class Name)Container.DataItem).Class Property Name %> 
</legend> 

現在,在項目限界數據事件,找到圖例控制。

protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || 
          e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     HtmlGenericControl ctl = (HtmlGenericControl)e.Item.FindControl("lg"); 
     ctl.InnerText //This is what will give you the result. 
    } 
}