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