1

我有一个在页面加载时绑定到数据源的 gridview。数据源连接到各种其他数据库表,即。datasourceItem.relatedEntity

gridview 中有一个列,其值取决于所有相关字段中某个字段的总和relatedEntities

所以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

首先,您需要使用 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

编辑: 如果页面没有编译,这是 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 回答