0

中继器中的中继器是我问题的答案。

但是,我很困惑,childRepeater.DataSource = ...;因为我需要使用一种方法来获取数据,并且该方法使用了一个参数parent ID。我不明白如何获得parent ID- 外部中继器 ID 的值。

我查看了其他一些示例,但没有有效的答案...

4

2 回答 2

2

使用引用的答案将是这样的,当然只需检查空值。

protected void ItemBound(object sender, RepeaterItemEventArgs args)
    {
        if (args.Item.ItemType == ListItemType.Item || args.Item.ItemType == ListItemType.AlternatingItem)
        {
            Repeater childRepeater = (Repeater)args.Item.FindControl("ChildRepeater");
            Repeater parentRepeater = (Repeater)args.Item.FindControl("ParentRepeater");       
            childRepeater.DataSource = YourMethod(parentRepeater.ID);
            childRepeater.DataBind();
        }
    }
于 2013-08-30T20:12:10.393 回答
1

在此处输入图像描述

<asp:Repeater ID="ParentRepeater" runat="server"    
   OnItemDataBound="ParentRepeater_ItemDataBound">
    <ItemTemplate>
        <strong>Parent</strong>
        <asp:Label runat="server" ID="FirstNameLabel" 
        Text='<%# Eval("FirstName") %>' />
        <asp:Label runat="server" ID="LastNameLabel" 
        Text='<%# Eval("LastName") %>' />
        <br/>
        <!-- Repeated data -->
        <asp:Repeater ID="ChildRepeater" runat="server">
            <ItemTemplate>
                <!-- Nested repeated data -->
                <strong>Children</strong>
                <asp:Label runat="server" ID="FirstNameLabel" 
                Text='<%# Eval("FirstName") %>' />
                <asp:Label runat="server" ID="LastNameLabel" 
                Text='<%# Eval("LastName") %>' /><br/>
            </ItemTemplate>
        </asp:Repeater>
        <hr/>
    </ItemTemplate>
</asp:Repeater>

public class User
{
    public int UserId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public List<User> Children;

    public User()
    {
        Children = new List<User>();
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        var users = new List<User>
        {
            new User
            {
                UserId = 1,
                FirstName = "Jon",
                LastName = "Doe",
                Children = new List<User> {new User {
                  UserId = 3, FirstName = "Marry", LastName = "Doe"}}
            },
            new User
            {
                UserId = 2,
                FirstName = "Eric",
                LastName = "Newton",
                Children = new List<User> {new User {
                  UserId = 3, FirstName = "Nick", LastName = "Newton"}}
            }
        };

        ParentRepeater.DataSource = users;
        ParentRepeater.DataBind();
    }
}

protected void ParentRepeater_ItemDataBound(object sender, 
    RepeaterItemEventArgs args)
{
    if (args.Item.ItemType == ListItemType.Item || 
       args.Item.ItemType == ListItemType.AlternatingItem)
    {
        var user = args.Item.DataItem as User;
        var childRepeater = (Repeater) args.Item.FindControl("ChildRepeater");

        // You can get parent id like this - 
        // int parentUserId = user.UserId;

        childRepeater.DataSource = user.Children;
        childRepeater.DataBind();
    }
}
于 2013-08-30T20:39:56.863 回答