2009-07-29 32 views
1

我有一個嵌套的repeater控件,顯示數據列表,在我的情況下,它是一個FAQ列表。這裏是設計部分:更改C#中Repeaters中數據綁定控件的值

<asp:Repeater ID="lists" runat="server"> 
    <ItemTemplate> 
     <h2 class="sf_listTitle"><asp:Literal ID="listTitle" runat="server"></asp:Literal></h2> 

     <p class="sf_controlListItems"> 
      <a id="expandAll" runat="server"> 
       <asp:Literal ID="Literal1" runat="server" Text="<%$Resources:ExpandAll %>"></asp:Literal> 
      </a> 
      <a id="collapseAll" runat="server" style="display:none;"> 
       <asp:Literal ID="Literal2" runat="server" Text="<%$Resources:CollapseAll %>"></asp:Literal> 
      </a> 
     </p> 

     <ul class="sf_expandableList" id="expandableList" runat="server"> 
      <asp:Repeater ID="listItems" runat="server"> 
       <HeaderTemplate> 
       </HeaderTemplate> 
       <ItemTemplate> 
        <li> 
         <h1 id="headlineContainer" runat="server" class="sf_listItemTitle"> 
          <a id="headline" runat="server" title="<%$Resources:ClickToExpand %>"></a> 
         </h1> 
         <div id="contentContainer" runat="server" class="sf_listItemBody" style="display:none;"> 
          <asp:Literal ID="content" runat="server"></asp:Literal> 
         </div> 
        </li> 
       </ItemTemplate> 
       <FooterTemplate> 
       </FooterTemplate> 
      </asp:Repeater> 
     </ul> 
    </ItemTemplate> 
</asp:Repeater> 

,我感興趣的中繼器是第二個轉發器,listItems。在我的代碼隱藏中,我不能直接調用listItems並查看其中的控件。我想抓的list.DataBinding內部控制(也許我需要使用不同的事件?)方法:

void lists_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    var oRepeater = (Repeater) lists.FindControl("listItems"); 
} 

但這出來作爲null。任何人都可以給我一些指示/提示我需要做什麼才能獲得訪問listItems轉發器,它是兒童控制?

謝謝!

回答

3
lists 

屬於每個的RepeaterItem,不是直接到中繼器本身。

嘗試: -

void lists_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 


    if (e.Item.ItemType == ListItemType.AlternatingItem 
     || e.Item.ItemType == ListItemType.Item) 
    { 
     Repeater oRepeater = (Repeater)e.Item.FindControl("listItems"); 

     // And to get the stuff inside. 
     foreach (RepeaterItem myItem in oRepeater.Items) 
     { 
      if (myItem.Item.ItemType == ListItemType.AlternatingItem 
       || myItem.Item.ItemType == ListItemType.Item) 
      { 
      Literal myContent = (Literal)myItem.FindControl("content"); 

      // Do Something Good! 
      myContent.Text = "Huzzah!"; 

      } 
     } 
    } 
} 

,你應該是不錯的:)

編輯納入DavidP樂於助人的細化。

1

你需要該行更改爲

var oRepeater = (Repeater) e.Item.FindControl("listItems"); 
+0

謝謝你,我完全忘了哈哈。所以一旦我得到這個oRepeater,我如何獲得控制文字? – Anders 2009-07-29 16:38:53

+0

想想我已經在你的回覆中報道過你了,先生:) – 2009-07-29 16:48:43

0

你很近!在您的事件處理程序中檢查RepeaterItemEventArgs以瞭解您正在處理的行的類型。您的兒童中繼器只能在(Alt)項目行上使用,不能用於頁眉或頁腳。我的猜測是它在頭上爆炸。

相關問題