在占位符中多次对相同的ascx控件进行LoadControl

时间:2012-02-07 17:30:51

标签: vb.net dynamic user-controls

我有一个UserControl里面有一个简单的转发器。它有一个称为数据的属性,当传入控件时,使用标准数据绑定填充转发器。

在页面上,我有一个占位符。

我有一个循环,它执行以下操作

        Dim qDetail As New UserControls_ReportDataTable
        qDetail = DirectCast(LoadControl("~/UserControls/ReportDataTable.ascx"), UserControls_ReportDataTable)
        qDetail.data = result
        phBCPSACustomQuestions.Controls.Add(qDetail)

每次结果都不同。

问题是,在我看到我的页面的循环结束时,控件的所有实例都填充了最后一组结果数据。

知道为什么会这样吗?

- 更新 -

基于评论,还有一些进一步的细节 控件中的属性“data”定义如下:

属性数据为IEnumerable

我已经验证每次循环迭代的结果都不同。

这是循环本身的完整代码

    For Each tblRow As DataRowView In dSet.Tables(0).DefaultView

        Dim result As DataView = dSet.Tables(1).DefaultView
        result.RowFilter = "QID = " & tblRow("QID").ToString


        Dim qDetail As UserControls_ReportDataTable
        qDetail = DirectCast(LoadControl("~/UserControls/ReportDataTable.ascx"), UserControls_ReportDataTable)
        qDetail.data = result
        phBCPSACustomQuestions.Controls.Add(qDetail)

    Next 

1 个答案:

答案 0 :(得分:0)

在没有看到所有代码的情况下我无法确定,但我猜你是在循环之外定义“结果”然后在循环内设置它的值。这将导致“访问修改后的关闭”情况(不知道这只是一个resharper术语还是全局术语)。

在任何情况下,在循环内定义一个变量并在那里设置结果的值,然后将其设置到您的控件中。它应该解决你的问题。