Pregunta

<asp:FormView DataSourceId="edsAccounts">
    <ItemTemplate>
        <asp:TextBox Text='<%# Eval("Email") %>' />
        <asp:DataGrid ID="dgReports" DataSource='<%# Eval("Reports") %>'>
    </ItemTemplate>
</asp:FormView>
<asp:EntityDataSource ID="edsAccounts" runat="server" ConnectionString="name=Entities" DefaultContainerName="Entities" EntitySetName="Accounts" EntityTypeFilter="Account" Include="Reports" />

Quiero que los DGREPORTS para empezar a trabajar. Tenga en cuenta que el cuadro de texto de correo electrónico funciona bien.

¿Fue útil?

Solución

Yo a la verdad creado fuentes de datos internas separadas, pero tengo otro problema. Yo era incapaz de establecer la cláusula Donde Identificación de la Entidad de los padres.

Tenga en cuenta que la FormView.DataItem no es accesible; que es de tipo EntityDataSourceWrapper que es una clase de amigo y de difícil acceso.

Así que creé una función para tratar con él por la reflexión.

Creo que es un error de Microsoft, hasta que lo fijan, lo siguiente podría ser útil para cualquier persona que utiliza controles anidados EntityDataSource.

Aquí está:

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

Ahora en el código detrás hago lo siguiente:

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

Tenga en cuenta la jerarquía en el modelo. Cuenta tiene muchos informes

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top