Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取嵌套中继器项的计数_C#_Asp.net_Count_Repeater_Nested Repeater - Fatal编程技术网

C# 如何获取嵌套中继器项的计数

C# 如何获取嵌套中继器项的计数,c#,asp.net,count,repeater,nested-repeater,C#,Asp.net,Count,Repeater,Nested Repeater,我的页面上有一个转发器。它在它的项目上包含一个嵌套的中继器。 其结构如下所示 <asp:Repeater ID="rptOuterRepeater" runat="server" > <ItemTemplate> <tr > <td> // Need some code logic here for counting </td&g

我的页面上有一个转发器。它在它的项目上包含一个嵌套的中继器。 其结构如下所示

<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>

//这里需要一些用于计数的代码逻辑吗

我需要计算
rptinnerreater
的项目计数来代替注释。这是否可以使用
内联
代码。

既然要将中继器绑定到数据源,为什么不能操纵数据源以包含内部中继器绑定到的子项集合的计数

您可以这样做:

<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>
那么,为什么不修改数据源集合以包含一个名为Count的额外字段呢


在客户端,您将不得不使用非常难看的javascript/jQuery代码,这将非常适合您的需要。

就简短的编码而言,我能做的最好的选择是使用文本和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>
用这个

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

没有经过测试,也不确定它是否有效,但我认为值得一试:-)


希望这会有帮助

中继器的数据源是什么数据类型?它的
IList
…但我认为在计算内联子项时不会使用数据源。我猜您的中继器会重复IList,而子中继器会重复当前IList项的子项中存储的内容,否则,我想我需要更多地解释子中继器的用途。是的,这是可能的,但您需要向我们展示您在哪里/如何绑定内部中继器。@绑定序列的MayankPathak问题。。。发布了一个新的答案
// Need some code logic here for counting
<%#((Repeater)Container.FindControl("rptInnerRepeater")).Items.Count%>