実際に別の内部データソースを作成しましたが、別の問題が発生しました。 親のエンティティのIDにWhere句を設定できませんでした。
FormView.DataItemにアクセスできないことに注意してください。それは、EntityDataSourceWrapper型で、友人クラスであり、アクセス不可能です。
私は反射で対処する関数を作成しました。
Microsoftのバグだと思っていますが、修正するまで、次のものは入れ子になったEntityDataSourceコントロールを使用する人には便利です。
ここでは、次のとおりです。
Module Functions
Public Function GetEntity(Of TEntity As EntityObject)(ByVal entityDataSourceWrapper As Object) As TEntity
If entityDataSourceWrapper Is Nothing Then Return Nothing
Dim type = entityDataSourceWrapper.GetType()
If Not type.FullName = "System.Web.UI.WebControls.EntityDataSourceWrapper" Then Return Nothing
Dim wrapper = type.GetProperty("WrappedEntity", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance)
Return DirectCast(wrapper.GetValue(entityDataSourceWrapper, Nothing), TEntity)
End Function
End Module
今、私は次の操作を行い背後にあるコードで:
Protected Sub fvAccounts_DataBound(ByVal sender As Object, ByVal e As EventArgs) Handles fvAccounts.DataBound
If fvAccounts.CurrentMode <> FormViewMode.ReadOnly Then Exit Sub
Dim account As Account = GetEntity(Of Account)(fvAccounts.DataItem)
If account Is Nothing Then Exit Sub
Dim edsReports As EntityDataSource = fvAccounts.Row.FindControl("edsReports")
edsReports.Where = "it.Account.AccountId = " & account.AccountId
gvReports.DataBind()
End Sub
は、モデル内の階層に注意してください。アカウントは、多くのレポートがあります。