2013-03-21 34 views
1

我在我的頁面上有一箇中繼器。它的物品上包含一個嵌套的中繼器。 它的結構如下如何獲得嵌套中繼器的數量

<asp:Repeater ID="rptOuterRepeater" runat="server" > 
    <ItemTemplate> 
      <tr > 
       <td> 
       // Need some code logic here for counting 
       </td> 
      </tr> 
      <tr> 
      <td> 
       <asp:Repeater ID="rptInnerRepeater" unat="server"> 
       <ItemTemplate> 
        <tr > 
         <td> 
          &nbsp; 
         </td> 
        </tr> 
        </ItemTemplate> 
      </td> 
      </tr> 
    </ItemTemplate> 
    </asp:Repeater> 

我需要統計rptInnerRepeater的項目在地方的評論數。這可能使用Inline代碼。

+0

什麼樣的數據類型是中繼器的數據源? – Kao 2013-03-21 08:03:09

+0

它的'IList '...但我不認爲會有任何使用數據源,而計算內聯子項.. – 2013-03-21 08:04:49

+0

我猜你重複重複IList和subRepeater,重複存儲在當前IList項目的孩子,否則我想我需要更多地解釋subRepeater的目的。 – Kao 2013-03-21 08:10:02

回答

0

因爲您將Repeater綁定到數據源,爲什麼不能操縱數據源來包含您的內部Repeater綁定到的SubItems Collection的Count?

你可以這樣來做:

<asp:Repeater ID="rptOuterRepeater" runat="server"> 
    <ItemTemplate> 
     <table> 
     <tr> 
      <td> 
       <%# Eval("Count") %> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <asp:Repeater ID="rptInnerRepeater" runat="server" 
         DataSource='<%# Eval("Items") %>'> 
       <ItemTemplate> 
       <tr> 
       <td> 
        <%# Eval("Id") %> 
       </td> 
       </tr> 
     </ItemTemplate> 
    </asp:Repeater> 
    </td> 
</tr> 
    </table> 
</ItemTemplate> 
</asp:Repeater> 

和你的數據源是:

var datasource = testList.Select(s => 
           new 
           { 
            Count = s.Items.Count, 
            Items = s.Items, 
            Id = s.Id 
           }).ToList(); 
      rptOuterRepeater.DataSource = datasource; 
      rptOuterRepeater.DataBind(); 

那麼爲什麼不修改您的數據源收集到包含稱爲計數一個額外的字段?

在客戶端,您將不得不使用非常醜陋的javascript/jQuery代碼,這將非常具體地滿足您的需求。

0

最好的我可以用短編碼來使用一個文字和一個ItemDataBound事件處理程序。不是我所謂的「內聯」,但我希望這會有所幫助。

<script runat="server"> 
    void innerRpItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.DataItem != null) 
     { 
      var lit = (Literal) ((Control) sender).Parent.FindControl("count"); 
      lit.Text = string.IsNullOrWhiteSpace(lit.Text) ? "1" : (int.Parse(lit.Text) + 1).ToString(); 
     } 
    } 
</script> 

<asp:Repeater ID="rptOuterRepeater" runat="server" > 
    <ItemTemplate> 
      <tr > 
       <td> 
       // Need some code logic here for counting 
       <asp:Literal runat="server" ID="count"/> 
       </td> 
      </tr> 
      <tr> 
      <td> 
       <asp:Repeater ID="rptInnerRepeater" runat="server" OnItemDataBound="innerRpItemDataBound" > 
       <ItemTemplate> 
        <tr > 
         <td> 
          &nbsp; 
         </td> 
        </tr> 
        </ItemTemplate> 
      </td> 
      </tr> 
    </ItemTemplate> 
    </asp:Repeater> 

----------------以前的非工作的解決方案

你可以試試這一個

替換該行

// Need some code logic here for counting 

<%#((Repeater)Container.FindControl("rptInnerRepeater")).Items.Count%> 

未測試,並不確定它會工作,但值得一試我會說:-)

希望這會有所幫助

+0

不...不工作!!! – 2013-03-21 09:14:59

+0

@MayankPathak得到0或0的錯誤? – jbl 2013-03-21 09:16:06

+0

計數爲0 .. – 2013-03-21 09:20:52