1

ページの読み込み時にデータソースにバインドされているグリッドビューがあります。データソースは、他のさまざまなデータベーステーブルに接続されています。datasourceItem.relatedEntity

グリッドビューには、関連するすべての特定のフィールドの合計に値が依存する列がありますrelatedEntities

と 1対多dataSourceItemの関係がrelatedEntityあり、関連するすべての特定の列の値を合計する必要がありますrelatedEntities。私はこれをできるだけ簡単にしたいと思っており、この構文が間違っていることは知っていますが、これは私がやりたかったことの一種です:

マークアップ:

<asp:TemplateField HeaderText="Sum">
     <ItemTemplate>
         <asp:Label ID="lblSum" runat="server" Text='<%# Bind("relatedEntity.ColumnName").Sum() %>' />
     </ItemTemplate>
</asp:TemplateField>

コード ビハインド (データバインディング):

myGridview.DataSource = from ds in DataContext.dataSource
                        where ds.Id == selectId
                        select ds;
myGridview.DataBind();

コードの量を最小限に抑えたいので、可能であれば方法を教えてください。明確にするために、私が機能させたいコード行は次のとおりです。

'<%# Bind("relatedEntity.ColumnName").Sum() %>'

または、少なくともその趣旨の何か。必ずしもこのSum()方法を使用する必要はありません...これを処理する別の/より良い方法がある場合は、お気軽にお知らせください

4

1 に答える 1

3

まず、Bind の代わりに Eval を使用する必要があります。次に、評価された式を EntityCollection 型にキャストする必要があります

<asp:Label ID="lblSum" runat="server" Text='<%# ((System.Data.Objects.DataClasses.EntityCollection<relatedEntityItemType>)Eval("relatedEntity")).Sum(i=>i.ColumnName) %>'></asp:Label>

また、適切なインポート<%@ Import Namespace="YourEntitiesNamespace" %> と System.Data.Entityが必要です

編集: ページがコンパイルされない場合、これは web.config で必要です

<compilation targetFramework="4.0">
     <assemblies>
     <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>            
      </assemblies>
</compilation>

また、 import ディレクティブを使用して型の完全な名前を取り除くこともできます

<%@ Import Namespace="..entities.." %>
<%@ Import Namespace="System.Data.Objects.DataClasses" %>
于 2011-07-01T13:41:57.160 に答える