코드

2012-12-03 1 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> 

repeater 내부 repeater가 있습니다. 코드에서 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 개 행을 표시하는 리피터를 들어,이 데이터 소스에서 하나의 행입니다 ... 기본적으로, 특정 행이고 나는 당신의 위 마크를 보았다

런타임에이 행에서 속성 값을 얻을 수 있습니다 위로 ... 아래처럼 Data-Bound 유형 클래스의 속성에 대해 언급하지 못한 것처럼 보입니다.

<%# ((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. 
    } 
}