使用数据绑定控件从Databound Gridview中的相关实体中的列获取总和

时间:2011-07-01 13:08:26

标签: asp.net entity-framework data-binding gridview databound-controls

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

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()方法...如果有不同/更好的处理方法,请随时告诉我

1 个答案:

答案 0 :(得分: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" %>