如何使用ASP.NET计算转发器中的项目数?
我希望显示以下内容:
MARKUP
第1页,共5页
ASPX
获取物品索引:(工作)
<%# DataBinder.Eval(Container, "ItemIndex", "") + 1%>
计算总项目数:(失败)
<%# DataBinder.Eval(Container.ItemIndex, rpt.Items.Count)%>
我更愿意在页面上执行此操作,但我愿意接受建议和代码。
答案 0 :(得分:1)
这是我得到的最佳解决方案
<asp:Repeater ID="rptGallery" runat="server" >
<ItemTemplate>
<div>
<div>
<asp:Label ID="Number_of_element_in_repeater" runat="server"
Text='<%#Convert.ToString(((IList((Repeater)Container.Parent).DataSource).Count) %>'>
</asp:Label>
</div>
</div>
</ItemTemplate>
</asp:Repeater>
中继器中的项目数为:
Convert.ToString(((IList)((Repeater)Container.Parent).DataSource).Count)
答案 1 :(得分:1)
如果数据源是数据表使用下面的代码
<%# Convert.ToString(((System.Data.DataTable)((Repeater)Container.Parent).DataSource).Rows.Count) %>
答案 2 :(得分:0)
我相信SqlDataSource使用&#34; SQLdatareader&#34;,这是逐行访问。因此,如果它有行,则一次返回一行,而不知道它还需要多少行。
您可以在行集中包含行总数(类似于count(*)),并将其作为每行中的字段返回。它并不理想,但它是将它返回到当前代码的一种方法。
如果您不反对使用代码隐藏,那么您可以调用并获取记录以获取行数,然后在标记中使用该值(将其设置为隐藏字段, 例如)。无论哪种方式,在知道有多少行之前,您需要遍历所有行。
答案 3 :(得分:-1)
看起来你需要转换为支持你正在使用的属性的数据类型,试试这个:
((Container.Parent as Repeater).DataSource as IList).Count