我有一个3级asp.net转发器,我需要找到第3级的项目。代码隐藏也发布在下面。
这是我的aspx代码:
<div class="container">
<asp:Repeater runat="server" ID="rptGrp0" OnItemDataBound="rptGrp0_ItemDataBound">
<HeaderTemplate>
<div id="Grp0" class="rptParent">
</HeaderTemplate>
<ItemTemplate>
<div id="rptParent <%# Eval("Name") %>">
<div class="row-fluid">
<div class="span12">
<h5 class="parentTitle"><%# Eval("Name") %></h5>
</div>
</div>
</div>
<div class="group">
<div id="rptChild <%# Eval("Name") %>">
<div>
<asp:Repeater runat="server" ID="rptGrp1" OnItemDataBound="rptGrp1_ItemDataBound">
<HeaderTemplate>
<div id="Grp1" class="rptChild">
</HeaderTemplate>
<ItemTemplate>
<div class="group">
<div id="rptGrandChildHeader <%# Eval("Name") %>">
<div class="content">
<div class="container">
<div class="row-fluid">
<div class="span12">
<p class="blue">
<asp:Label runat="server" ID="lblChildName" Text='<%# Eval("Name") %>'></asp:Label>
</p>
</div>
</div>
</div>
</div>
</div>
<div id="rptGrandChild <%# Eval("Name") %>">
<asp:Repeater runat="server" ID="rptContent">
<HeaderTemplate>
<div class="c_module">
<div class="container">
<div class="row-fluid">
<div class="span12">
<div class="data_controls">
<div class="clearfix"></div>
</div>
<div class="d_table_module">
<table border="0" class="display" id="tblContent">
<thead>
<tr>
<th>Product</th>
</tr>
</thead>
<tbody>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td style="width:100px;">
<asp:Label runat="server" ID="lblProduct" Text='<%# Eval("Product") %>'></asp:Label>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</FooterTemplate>
</asp:Repeater>
</div>
</div>
</ItemTemplate>
<FooterTemplate>
</div>
</FooterTemplate>
</asp:Repeater>
</div>
</div>
</div>
</ItemTemplate>
<FooterTemplate>
</div>
</FooterTemplate>
</asp:Repeater>
</div>
这是我的代码隐藏。
protected void lnkButton_Click(object sender, EventArgs e)
{
Repeater primary = (Repeater)this.FindControl("rptGrp0");
if (primary != null)
{
// Items.Count = 0.
foreach (RepeaterItem item in primary.Items)
{
Repeater secondary = (Repeater)item.FindControl("rptGrp1");
if (secondary != null)
{
foreach (RepeaterItem b in secondary.Items)
{
Repeater target = (Repeater)b.FindControl("rptContent");
if (target != null)
{
foreach (RepeaterItem c in target.Items)
{
}
}
}
}
}
}
}
问题是我的repeater.Items.Count是0。
请指教,谢谢。
答案 0 :(得分:0)
Repeater
仅在与DataSource
绑定时才会显示。确保您的转发器与正确的DataSource
绑定。
答案 1 :(得分:0)
查找第3个中继器的项目取决于您开始时如何对其进行数据绑定。如果您在Page_Load
事件中绑定数据,则在处理Click事件后绑定数据。在lnkButton_Click
事件中,转发器的内容尚未绑定。访问这些项目的最简单方法是使用Item_DataBound
事件来访问这些项目。
示例代码:
<asp:Repeater runat="server" ID="rptContent" OnItemDataBound="rptContent_ItemDataBound">
...
</asp:Repeater>
代码背后:
protected void rptContent_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
e.Item; // This current item
Repeater rpt = (Repeater)(sender);
rpt.Items; // All items
//Do some condition here to test on the item for whatever you want to do
if(e.Item == someCondition)
// some operation here
}
答案 2 :(得分:0)
好的,我找到了解决方案。它与ASP.NET页面生命周期有关。
在lnkButton_Click事件之后,发生了回发,但我需要在回发时“重新绑定”转发器数据源,而不仅仅是初始page_load。
e.g。
protected void Page_Load()
{
if (!IsPostBack)
{
// bind control
}
else
{
// rebind control
}
}