在中继器中获得子控制
本文关键字:控制 中继器 | 更新日期: 2023-09-27 18:03:07
我使用的是ASP。.NET和c#在。NET 4上开发一个简单的应用程序。我有一个带有包含几个控件的项目模板的重复器;其中之一是必须根据复杂计算设置的标签。我使用OnItemDataBound
事件来计算文本,并在后面的代码中设置标签的文本,如下所示:
protected void repRunResults_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
//capture current context.
Repeater repRunResults = (Repeater)sender;
Label laMessage = (Label)repRunResults.Controls[0].FindControl("laMessage");
DSScatterData.RunResultsRow rRunResults = (DSScatterData.RunResultsRow)((DataRowView)(e.Item.DataItem)).Row;
//show message if needed.
int iTotal = this.GetTotal(m_eStatus, rRunResults.MaxIterations, rRunResults.TargetLimit);
if(iTotal == 100)
{
laMessage.Text = "The computed total is 100.";
}
else
{
laMessage.Text = "The computed total is NOT 100.";
}
}
我的中继器的数据源包含几行,因此我希望中继器的每次显示都将调用事件处理程序,并根据关联行的数据显示消息。但是,我只得到一条消息,该消息出现在第一个重复器印象中,但与数据源中最后一个行的数据匹配。
似乎每次ItemDataBound
事件触发时,我的代码捕获的控件都是相同的,因此我在中继器的每个印象上都覆盖了消息。我已经逐步完成了代码,这就是它显然正在发生的事情。
知道为什么吗?如何解决这个问题?
。我的中继器嵌套在另一个中继器中。我不认为这应该是相关的,但它可能是。
您正在抓取第一个。您需要像这样使用传入的项:
protected void repRunResults_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
//capture current context.
Repeater repRunResults = (Repeater)sender;
Label laMessage = e.Item.FindControl("laMessage"); //<-- Used e.Item here
DSScatterData.RunResultsRow rRunResults = (DSScatterData.RunResultsRow)((DataRowView)(e.Item.DataItem)).Row;
//show message if needed.
int iTotal = this.GetTotal(m_eStatus, rRunResults.MaxIterations, rRunResults.TargetLimit);
if(iTotal == 100)
{
laMessage.Text = "The computed total is 100.";
}
else
{
laMessage.Text = "The computed total is NOT 100.";
}
}