【发布时间】:2011-05-03 21:01:53
【问题描述】:
我想使用共享相同 XML 数据源的嵌套转发器,其中父转发器将数据源向下传递给子转发器,因此它不需要为父转发器中的每个数据项重新访问数据源。
父中继器的 XPATH:“/AdpDeselection/Documents/Document[@type='A']/Funds/Fund[@cuspid='1234']”
我会在下面的代码中为子Repeater 中的DataSource 属性添加什么?
我宁愿不必使用 OnItemDataBound,因为我认为它不需要它,但我想我可能错了。
<asp:XmlDataSource ID="xdsCurrentFunds" runat="server" DataFile="~/App_Data/CustomApps/DeselectOptions.xml" />
<asp:Repeater ID="rptCurrentFund" runat="server" OnItemDataBound="rptCurrentFund_ItemDataBound" DataSourceID="xdsCurrentFunds">
<ItemTemplate>
<div class="CurrentFund"><%# XPath("@name")%></div>
<asp:HiddenField ID="hdnID" runat="server" Value='<%# XPath("@cuspid")%>' />
<asp:Repeater ID="rptReplacementFunds" runat="server" DataSource='WHAT SHOULD I PUT HERE TO GET THE DATASOURCE?'>
<ItemTemplate>
<div class="ReplacementFund"><%# XPath("@ticker")%></div>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
<SeparatorTemplate>
<br />
</SeparatorTemplate>
</asp:Repeater>
XML 结构...
<Deselection>
<Documents>
<Document type="A">
<Funds>
<Fund cuspid="1234" name="CURRENT FUND NUMBER ONE">
<ReplacementFunds>
<Fund ticker="ABCD" cuspid="56785678">FUND NUMBER ONE</Fund>
<Fund ticker="EFGH" cuspid="23452345">FUND NUMBER TWO</Fund>
</ReplacementFunds>
</Fund>
<Fund cuspid="2345" name="CURRENT FUND NUMBER ONE">
<ReplacementFunds>
<Fund ticker="HJKL" cuspid="56785678">FUND NUMBER THREE</Fund>
<Fund ticker="YUIO" cuspid="23452345">FUND NUMBER FOUR</Fund>
</ReplacementFunds>
</Fund>
</Document>
</Documents>
</Deselection>
【问题讨论】:
-
您将需要一个 OnItemDataBound... 在当前设置中... 但是如果您使用 for/foreach-loops 而不是... 这完全消除了中继器的使用.. . 但是接下来你需要在代码隐藏中仔细排列Lists/Arryas中的数据...
-
@sani - 谢谢。但是,我已经看到它这样做了。我只是不确定他们是如何想出 DataSource 属性中的内容的,因为我看到的示例没有显示 XML,所以我看不到 ASP.NET 代码背后的逻辑。
-
只是为了澄清一件事:使用 Repeaters 和 OnItemDataBound 比滚动自己的 for/foreach 处理更好。中继器的性能会受到影响(有人告诉过我),但除非您有一个非常繁忙的站点,否则中继器就足够了......
-
而对于您应该放入子数据源项的内容,它应该是反映 ReplacementFunds 列表/数组的父数据类型属性。
-
@sani - 谢谢;您可以将其添加为答案,以便我接受它来给您信用吗?
标签: .net xml repeater xmldatasource