我有一个手风琴嵌入手风琴。我不确定你能做到这一点,但你可以!有用。然而...
在内置的手风琴中,我有一个转发器。当我尝试设置RepeaterName.DataSource时,我得到一个空引用异常。我试图通过使用this.FindControl强制解决问题,但仍然没有快乐。正好背后的代码没有在嵌套的Accordion中看到Repeater。
我很沮丧,但并不感到惊讶。
我真的不想“解开”这些。我所拥有的是作者手风琴,然后在每个作者窗格内我都有另外一部手风琴。
所以,我们有
作者1
第1条
第2条
Author2
第1条
第2条
第3条
等。
编辑:添加标记和代码
<AjaxToolkit:AccordionPane runat="server" ID="JohnBunyanPane">
<Header> John Bunyan</Header>
<Content>
<AjaxToolkit:Accordion ID="JohnBunyanInternalAccordion" runat="server"
SelectedIndex="-1"
CssClass="accordion"
HeaderCssClass="accordionHeader"
HeaderSelectedCssClass="accordionHeaderSelected"
ContentCssClass="accordionContent"
AutoSize="None"
FadeTransitions="true"
TransitionDuration="250"
FramesPerSecond="40"
RequireOpenedPane="false"
SuppressHeaderPostbacks="true">
<Panes>
<AjaxToolkit:AccordionPane runat="server" ID="GraceAboundingPane">
<Header> Grace Abounding</Header>
<Content>
<div style="overflow-y:scroll;height:450px">
<asp:UpdatePanel ID="GraceAboundingUpdatePanel" runat="server">
<ContentTemplate>
<asp:Repeater ID="GraceAboundingRepeater" runat="server">
<ItemTemplate>
<br />
<span>
<asp:Label ID="GraceAboundingBody" runat="server" Width="100%" Text='<%# Eval("Body")%>'></asp:Label>
</span>
<br />
<asp:Image ID="Image1" runat="server" ImageUrl="~/Images/separator.jpg" />
<br /><br />
</ItemTemplate>
</asp:Repeater>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</Content>
</AjaxToolkit:AccordionPane>
</Panes>
</AjaxToolkit:Accordion>
</Content>
</AjaxToolkit:AccordionPane>
以下是填充它的电话:
try
{
myDataAdapter.Fill(myDataSet);
DataTable myDataTable = myDataSet.Tables[0];
var childAccordionPane = (AccordionPane)this.FindControl("JohnBunyanPane");
var repeater = (Repeater)childAccordionPane.FindControl("GraceAboundingRepeater");
//Repeater myRepeater = (Repeater)childAccordionPane.FindControl("GraceAboundingRepeater");
//GraceAboundingRepeater.DataSource = myDataTable;
//GraceAboundingRepeater.DataBind();
repeater.DataSource = myDataTable;
repeater.DataBind();
}
答案 0 :(得分:0)
您的FindControl
可能无法看到AccordionPane。您需要遍历顶级(父级)AccordionPane。
这样的事情:
var childAccordionPane = (AccordionPane)parentAccordionPane.FindControl("childAccordionPaneId");
var repeater = (Repeater)childAccordionPane.FindControl("repeaterId");
如果给出标记以验证代表每个控件ID的字符串是否正确,我们可以使其编译和工作。