.net - 如何使用单个 XMLDataSource 嵌套 Repeater?

标签 .net xml repeater xmldatasource

我想使用共享相同 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>

最佳答案

经过更广泛的挖掘,我实际上找到了答案。这是工作代码:

<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:Repeater ID="rptReplacementFunds" runat="server" DataSource='<%# XPathSelect("ReplacementFunds/*") %>'>
            <ItemTemplate>
                <div class="ReplacementFund"><%# XPath("@ticker")%></div>
            </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
    <SeparatorTemplate>
        <br />
    </SeparatorTemplate>
</asp:Repeater>

这就像一个魅力,不需要 OnItemDataBound 代码。

The secret sauce is the XPathSelect apparently .

关于.net - 如何使用单个 XMLDataSource 嵌套 Repeater?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5875682/

相关文章:

c# - 为什么尾随 %20(在本例中为有效数据)会终止 asp.net mvc 路由

c# - 使用下级用户名检索用户主体对象

mysql - 加载格式错误的 xml 文件

asp.net - 使用中继器显示信息

apache-flex - Flex 3 : looping through repeater items after they've been created. ..我怎样才能得到x、y、宽度等

asp.net - 如何强制Azure上的Web应用程序与.net Framework 4.5.2一起使用?

c# - 带整数表达式的 switch case

android - 使用数组适配器的微调器实现

java - Sax 解析最佳实​​践

c++ - 在 C++ 中与 Repeater 中的委托(delegate) QML 组件交互