Frage

<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" />

Ich möchte die dgReports zu arbeiten. Beachten Sie, dass das E-Mail-Textfeld funktioniert gut.

War es hilfreich?

Lösung

ich in der Tat separate innere Datenquellen erstellt, aber ich habe ein anderes Problem. Ich war nicht in der Lage, die Where-Klausel auf das Mutterunternehmens der ID.

Beachten Sie, dass das FormView.DataItem nicht zugänglich ist; es ist vom Typ EntityDataSourceWrapper, die ein Freund der Klasse ist und nicht zugänglich.

Also habe ich eine Funktion erstellt mit ihm durch Reflexion befassen.

Ich denke, es ist ein Microsoft Bug, bis sie es zu beheben, die die folgenden sein könnte sehr nützlich für jeden verschachtelten EntityDataSource Steuerelemente verwendet.

Hier ist sie:

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

Jetzt im Code hinter mir Folgendes tun:

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

Beachten Sie die Hierarchie im Modell. Konto viele Berichte hat

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top