如何从内部中继器获取外部中继器项目。我的外部转发器数据源有3个项目。我的内部转发器数据源有7个项目。当我在内部中继器内部进行迭代时,如何从外部中继器获取项目?
我的外部转发器数据源是通用列表。此列表中的一个项目是一天(数字格式)。我的内部转发器是此列表中的int,1到7的列表。我需要一些逻辑,这样当我迭代天数列表(在内部)时.....如果外部在当前记录的迭代上有一个值2(所以有一个匹配)我打印一些东西。 / p>
我希望这是有道理的......
感谢您提供的任何帮助或提示。
答案 0 :(得分:2)
我通常做的就是捕获数据绑定上的外部项目并将其保存到页面上的变量中。在这里,我有两个连续的中继器。我从第一个转发器中保存了一年,然后在我绑定第二个转发器时可以引用它。
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;
答案 1 :(得分:0)
如果您知道从内部转发器到外部转发器的.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
为止时间。