0
<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を動作させたいです。 電子メールのテキストボックスは正常に動作することに注意してください。親のEntityDataSourceのナビゲーションプロパティにバインドされた入れ子のGridViewを作成するにはどうすればよいですか?

答えて

0

実際に別の内部データソースを作成しましたが、別の問題が発生しました。 親のエンティティの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 

は、モデル内の階層に注意してください。アカウントは、多くのレポートがあります。

関連する問題