我有一个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
答案 0 :(得分:0)
在没有看到所有代码的情况下我无法确定,但我猜你是在循环之外定义“结果”然后在循环内设置它的值。这将导致“访问修改后的关闭”情况(不知道这只是一个resharper术语还是全局术语)。
在任何情况下,在循环内定义一个变量并在那里设置结果的值,然后将其设置到您的控件中。它应该解决你的问题。