在中继器中获得子控制

本文关键字:控制 中继器 | 更新日期: 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.";
    }
}