简体   繁体   English

直放站内的直放站-父级ID

[英]Repeater inside repeater - parent ID

Repeater in Repeater is the answer to my question. 直放站中的直放站是我的问题的答案。

However, I am confused by childRepeater.DataSource = ...; 但是,我对childRepeater.DataSource = ...;感到困惑childRepeater.DataSource = ...; as I need to use a method to get the data, and the method uses an argument parent ID . 因为我需要使用一种方法来获取数据,并且该方法使用参数parent ID I don't understand how I get the value of the parent ID - the outer repeater's ID. 我不明白如何获取parent ID (外部中继器的ID)的值。

I looked at a few other examples but no answer that works... 我看了其他一些例子,但没有答案有效...

Using the referenced answer it will be something like this, just check for nulls of course. 使用引用的答案将是类似这样的,当然只需检查是否为空。

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

在此处输入图片说明

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM