中继器ItemTemplate Container.DataItem是一个数组

时间:2019-02-22 16:52:46

标签: asp.net

我有一个返回列表数据的服务。“类”中的列之一也是列表。实际上,ParamName和ParamValue需要来自参数列表。

我可以在ItemTemplate内放置一个中继器吗?如果可以,我将无法使它正常工作,请为我指明正确的方向。

<asp:Repeater id="RepeaterData" runat="server">
    <HeaderTemplate>
        <table border="1">
        <tr>
            <td><b>Name</b></td>
            <td><b>CreatedDate</b></td>
            <td><b>ParamName</b></td>
            <td><b>ParamValue</b></td>
        </tr>
    </HeaderTemplate>

    <ItemTemplate>
        <tr>
            <td><%# DataBinder.Eval(Container.DataItem, "FullName") %></td>
            <td><%# DataBinder.Eval(Container.DataItem, "CreatedDate") %></td>
        <td>
            <asp:Repeater runat="server" id="RepeateParameters" DataSource="<%# DataBinder.Eval(Container.DataItem, "Parameters") %>">
            <ItemTemplate><%# DataBinder.Eval(Container.DataItem, "ParamName") %><br /></ItemTemplate>
            </asp:Repeater>
        </td>
        <td>
            <asp:Repeater runat="server" id="Repeater1" DataSource="<%# DataBinder.Eval(Container.DataItem, "Parameters") %>">
            <ItemTemplate><%# DataBinder.Eval(Container.DataItem, "ParamValue") %><br /></ItemTemplate>
            </asp:Repeater>
        </td>
        </tr>
    </ItemTemplate>

    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>

2 个答案:

答案 0 :(得分:1)

您可以轻松使用嵌套中继器。如果它是列表中的列表,则您甚至不需要修改后面的代码。本示例使用强类型中继器。

<asp:Repeater ID="Repeater1" runat="server" ItemType="MyNameSpace.TestClass">
    <ItemTemplate>

        <%# Item.Name %>

        <ul>
            <asp:Repeater ID="Repeater2" runat="server" ItemType="MyNameSpace.TestClass" DataSource='<%# Item.NestedList %>'>
                <ItemTemplate>

                    <li><%# Item.ID %> <%# Item.Date.ToShortDateString() %></li>

                </ItemTemplate>
            </asp:Repeater>
        </ul>

        <hr />

    </ItemTemplate>
</asp:Repeater>

仅用于使演示完整的类。

public class TestClass
{
    public int ID { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public DateTime Date { get; set; }
    public bool Deleted { get; set; }
    public List<TestClass> NestedList { get; set; }
}

答案 1 :(得分:0)

这是最终的代码:

<asp:Repeater id="RepeaterData" runat="server" ItemType="accounts.AuditEntry">
    <HeaderTemplate>
        <table border="1">
        <tr>
            <td><b>UsersFullName</b></td>
            <td><b>CreatedDate</b></td>
            <td><b>ParamName</b></td>
            <td><b>ParamValue</b></td>
        </tr>
    </HeaderTemplate>

    <ItemTemplate>
        <tr>
            <td></td>
            <td><%# Item.UsersFullName %></td>
            <td><%# Item.CreatedDate %></td>
            <td>
                <asp:Repeater ID="Repeater2" runat="server" ItemType="accounts.ParamInfo" DataSource='<%# Item.Parameters %>'>
                <ItemTemplate><%# Item.ParamName %><br /></ItemTemplate>
                </asp:Repeater>
            </td>
            <td>
                <asp:Repeater ID="Repeater3" runat="server" ItemType="accounts.ParamInfo" DataSource='<%# Item.Parameters %>'>
                <ItemTemplate><%# Item.ParamValue %><br /></ItemTemplate>
                </asp:Repeater>
            </td>
        </tr>
    </ItemTemplate>

    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>