كيف يمكنني إنشاء متداخلة GridView لا بد أن الأم EntityDataSource الملاحة الملكية ؟

StackOverflow https://stackoverflow.com/questions/992035

سؤال

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

أريد dgReports لبدء العمل.لاحظ أن مربع نص البريد الإلكتروني يعمل على ما يرام.

هل كانت مفيدة؟

المحلول

أنا في الواقع خلق منفصلة الداخلية datasources لكن لدي مشكلة أخرى.كنت غير قادر على تعيين جملة Where الوالد الكيان الهوية.

لاحظ أن FormView.DataItem ليست في المتناول ؛ انها من نوع EntityDataSourceWrapper وهو صديق فئة لا يمكن الوصول إليها.

لذلك أنا خلقت وظيفة التعامل مع ذلك عن طريق التفكير.

اعتقد انه مايكروسوفت علة ، حتى يصلحونها التالية قد تكون مفيدة لمن يستخدم متداخلة 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

ملاحظة التسلسل الهرمي في النموذج:حساب العديد من التقارير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top