我確實創建了獨立的內部數據源,但我又遇到了另一個問題。 我無法將Where子句設置爲父實體的ID。
請注意,FormView.DataItem不可訪問;它是EntityDataSourceWrapper類型,它是一個朋友類,不可訪問。
所以我創建了一個函數來處理它的反射。
我認爲這是一個微軟的bug,直到他們解決了這個問題,對於任何使用嵌套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
注意模型的層次結構:帳戶有很多報道。