ASP.NET WebForms嵌套转发器与LINQ组数据源

Hal*_*yon 0 html c# asp.net webforms servercontrols

我有一个LINQ分组,我想用它来填充父和子转发器控件.

<asp:Repeater ID="Parent" runat="server" OnItemDataBound="Parent_ItemDataBound">
    <ItemTemplate>
        <%# Eval("Key") %>
        <asp:Repeater ID="Child" runat="server">
            <ItemTemplate>
                <%# Eval("Id")  %>
                <%# Eval("Name")  %>
            </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>

public class Dog
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Breed { get; set; }
}

private IEnumerable<IGrouping<string, Dog>> GetDogs()
{
    var dogs = new List<Dog>
    {
        new Dog
        {
            Id = 1,
            Name = "Rex",
            Breed = "Poodle",
        },
        new Dog
        {
            Id = 2,
            Name = "Fido",
            Breed = "Terrier",
        },
        new Dog
        {
            Id = 3,
            Name = "Killer",
            Breed = "Pit Bull",
        }
    };

    return dogs.GroupBy(_ => _.Breed);
}

protected void Page_Load(object sender, EventArgs e)
{
    Parent.DataSource = GetDogs();
    Parent.DataBind();
}

protected void Parent_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    var item = e.Item;
    if ((item.ItemType == ListItemType.Item) || (item.ItemType == ListItemType.AlternatingItem))
    {
        var repeater = (Repeater)item.FindControl("Child");

        // I'm stuck on this code...
        //repeater.DataSource = what to do?
        //repeater.DataBind();
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试在Parent_ItemDataBound事件中设置子转发器的数据源.我该怎么做呢?item.DataItem是类型对象,我无法弄清楚如何获取数据项内的狗列表.

cmd*_*mpt 5

扩展约书亚的正确答案.如果您可以使用4.5运行时,则可以在转发器本身上声明类型,这样您就不必绑定ItemDataBound事件.

<ul>
    <asp:Repeater runat="server" ID="Parent" ItemType="IGrouping<String, Dog>">
        <ItemTemplate>
            <li><%# Item.Key %><ul>
            <asp:Repeater runat="server" ID="Child" ItemType="Dog" DataSource="<%#Item%>">
                <ItemTemplate>
                    <li><%# Item.Id %></li>
                    <li><%# Item.Name %></li>
                </ItemTemplate>
            </asp:Repeater>
            </ul></li>
        </ItemTemplate>
    </asp:Repeater>
</ul>
Run Code Online (Sandbox Code Playgroud)