Использование элементов управления с привязкой к данным для получения суммы из столбца в связанном объекте в сеточном представлении с привязкой к данным - PullRequest
1 голос
/ 01 июля 2011

У меня есть сетка, которая привязана к хранилищу данных при загрузке страницы. Источник данных связан с различными другими таблицами базы данных, т.е. datasourceItem.relatedEntity

В сетке вида есть столбец, значение которого зависит от суммы определенного поля во всех связанных relatedEntities.

Итак, dataSourceItem имеет отношение один ко многим с relatedEntity, и мне нужно суммировать значение из определенного столбца во всех связанных relatedEntities. Я хочу сделать это как можно проще, и я знаю, что этот синтаксис неправильный, но это то, что я хотел сделать:

Markup:

<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 Ответ

3 голосов
/ 01 июля 2011

Сначала вам нужно использовать 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 Namespace="..entities.." %>
<%@ Import Namespace="System.Data.Objects.DataClasses" %>
...