【问题标题】:Get Outer Repeater Item from Inner Repeater从内部中继器获取外部中继器项目
【发布时间】:2011-06-29 21:38:17
【问题描述】:

如何从内部中继器获取外部中继器项目。我的外部转发器数据源有 3 个项目。我的内部中继器数据源有 7 个项目。当我在内部中继器内部进行迭代时,如何从外部中继器获取项目?

我的外部转发器数据源是一个通用列表。此列表中的一项是一天(数字格式)。我的内部中继器是一个 int 列表,在这个列表中是 1 到 7。我需要一些逻辑,以便当我迭代天列表时(在内部).....如果在当前记录的迭代中外部的值为 2(所以有匹配)我打印一些东西。

我希望这是有道理的......

感谢您提供的任何帮助或提示。

【问题讨论】:

    标签: c# data-binding repeater


    【解决方案1】:

    我通常做的只是捕获数据绑定上的外部项目并将其保存到页面上的变量中。在这里,我有两个连续的中继器。我从第一个转发器中保存了年份,然后在绑定第二个转发器时可以引用它。

        protected void repAnnualReport_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            CurrentYear = int.Parse(((Literal)e.Item.FindControl("litLicenseYear")).Text);
    
            Repeater repLicenseLengths = (Repeater)e.Item.FindControl("repLicenseLengths");
            repLicenseLengths.DataSource = GetLicenseLengths(CurrentYear);
            repLicenseLengths.DataBind();
        }
    
        protected void repLicenseLengths_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            CurrentLength = int.Parse(((Literal)e.Item.FindControl("litLicenseLength")).Text) * 365;
    
            Repeater repMonthlyReport = (Repeater)e.Item.FindControl("repMonthlyReport");
            repMonthlyReport.DataSource = new object[12];
            repMonthlyReport.DataBind();
        }
    

    如果您与第一个转发器的绑定是类列表或可查询的,您可以在第一行中像这样访问单个项目。

    SaveCurrentItem = (CurrentItemClass)e.Item.DataItem;
    

    【讨论】:

    • 这是一个好方法。保存对象以供以后使用比尝试遍历对象树找到它要好得多。
    【解决方案2】:

    如果您知道 .net 控件从内部中继器到外部中继器的层次结构,则可以使用 NamingContainer 属性找到向上的方法。

        protected void Repeater2_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
    
                Repeater parentRepeater;
    
                // e.Item: the item/header/whatever template that kicked off this event
                // e.Item.NamingContainer: the owner of the item template (the innner repeater)
                // e.Item.NamingContainer.NamingContainer: the outer item template
                // e.Item.NamingContainer.NamingContainer.NamingContainer: the outer Repeater
    
                parentRepeater = (Repeater)e.Item.NamingContainer.NamingContainer.NamingContainer;
    
            }
        }
    

    否则,如果您不确定结构或不想要这样的固定引用,您可以循环遍历NamingContainer,直到您第二次遇到Repeater 类型的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      相关资源
      最近更新 更多