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