ASP.NET WebForms的嵌套Repeater使用LINQ组数据源 [英] ASP.NET WebForms Nested Repeater With LINQ Group Data Source

查看:160
本文介绍了ASP.NET WebForms的嵌套Repeater使用LINQ组数据源的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有我想要一个LINQ分组用于填充父和子中继控制。

I have a LINQ grouping that I'd like to use to populate parent and child repeater controls.

<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();
    }
}

我想设置在Parent_ItemDataBound事件的子中继的数据源。我该怎么做呢? item.DataItem是类型的对象,我无法弄清楚如何获得狗的名单是这样的数据项中。

I'm trying to set the child repeater's data source in the Parent_ItemDataBound event. How do I do this? item.DataItem is type object and I can't figure out how to obtain the list of dogs that's inside the data item.

推荐答案

拓展约书亚的正确答案。如果4.5运行时提供给你,你可以声明的中继器本身的类型,所以你就不必在的ItemDataBound 绑定事件。

Expanding on Joshua's correct answer. If the 4.5 runtime is available to you, you can declare the types on the repeater itself so you will not have to bind the ItemDataBound event.

<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>

这篇关于ASP.NET WebForms的嵌套Repeater使用LINQ组数据源的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆