Получить предмет внешнего ретранслятора - PullRequest
1 голос
/ 30 июня 2011

Как вы получаете предмет внешнего повторителя от внутреннего повторителя. У моего внешнего источника данных ретранслятора есть 3 пункта. У моего внутреннего источника данных ретранслятора есть 7 пунктов. Когда я выполняю итерацию внутри внутреннего повторителя, как мне получить предмет из внешнего повторителя?

Мой внешний источник данных повторителя - это общий список. Одним из пунктов в этом списке является день (в числовом формате). Мой внутренний ретранслятор представляет собой список от 1 до 7 в этом списке. Мне нужна некоторая логика, чтобы, когда я повторяю список дней (во внутреннем) ..... если внешний имеет значение 2 на текущей записываемой итерируемой (так что есть совпадение), я что-то печатаю.

Надеюсь, это имеет смысл ...

Спасибо за предоставленную помощь или советы.

Ответы [ 2 ]

2 голосов
/ 30 июня 2011

Что я обычно делаю, это просто ловлю внешний элемент в привязке к данным и сохраняю его в переменную на странице. Здесь у меня есть два последовательных повторителя. Я сохраняю год от первого повторителя, а затем могу ссылаться на него, когда связываю второй.

    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;
0 голосов
/ 30 июня 2011

Если вам известна иерархия элементов управления .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 во второй раз.

...