1

我有一個在頁面加載時綁定到datasoure的gridview。數據源連接到各種其他數據庫表,即。 datasourceItem.relatedEntity使用數據綁定控件從Databound Gridview中的相關實體中的列中獲取總和

gridview中有一列的值取決於所有相關的relatedEntities中某個字段的總和。

所以dataSourceItemrelatedEntity有一對多的關係,我需要總結所有相關的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()的方法......如果有不同的/更好的處理方式,請隨時讓我知道

回答

3

首先你需要使用Eval而不是Bind。 接下來,你需要評估的表達投射到您的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的

編輯: 如果頁面沒有按't編譯,這是需要在web.config

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

此外,你可以擺脫使用類型的全名進口指令

<%@ Import Namespace="..entities.." %> 
<%@ Import Namespace="System.Data.Objects.DataClasses" %> 
+0

這似乎並不想爲我工作。 web.config已經添加了程序集,我已經導入了名稱空間,但它不想綁定數據。我得到一個HttpException,說* AnonymousType1b [8]不包含名稱relatedEntityItemType * –

+0

其'relatedEntities'的集合,這樣'relatedEntity.type = relatedEntity' –

+0

我想我看到問題。糾正我,如果我錯了,但是我得到一個匿名類型的事實與我如何databinding gridview?由於我需要做的格式化,我實際上需要查詢查詢的結果,然後將數據綁定到第二個查詢,並在第二個查詢中投射第一個查詢AsEnumerable()。即。 'myGridView.DataSource =從firstQuery.AsEnumerable()中的ds選擇新的{*屬性*};' –

相關問題