2012-04-25 3 views
2

Я просмотрел сотни страниц результатов Google, пытаясь найти ответ за это в течение последних нескольких дней.Внешнее поле таблицы ключей, которое не отображается в окне просмотра списка поддерживаемых динамических данных

Использование автономной страницы динамических данных для отображения таблицы с использованием EntityDataSource, причем одно из полей является внешним ключом для подтаблицы. Я хочу, чтобы он отображал значение из подтаблицы. Я играл с упрощенным случаем, используя базу данных NorthWinds (см. Код ниже). Если я назначу DynamicControl DataField = «Поставщик», вместо этого отобразит имя подкатегории/класса («DAL.Supplier»). Если я попытаюсь назначить DataField = «Supplier.CompanyName», это приведет к ошибкам с «В таблице« Продукт »нет столбца с именем« Supplier.CompanyName »». Поскольку я хочу использовать возможности редактирования динамических данных, используя шаблонное поле с <% # Eval («Supplier.CompanyName»)%> отсутствует.

Возможно ли это с помощью отдельной страницы динамических данных? Он четко работает в полностью защищенной системе. Или я (надеюсь) просто что-то пропустил? Спасибо.

Test.aspx

<%@ Page Title="" Language="VB" MasterPageFile="~/Master/Site.master" AutoEventWireup="false" CodeFile="Test.aspx.vb" Inherits="Test" %> 
<asp:Content ID="Content3" ContentPlaceHolderID="BodyContent" Runat="Server"> 

<asp:ListView ID="ListView1" runat="server" DataSourceID="theDataSource" DataKeyNames="ProductID"> 
    <ItemTemplate> 
     <tr> 
      <td> 
       <asp:DynamicControl runat="server" DataField="ProductID" Mode="Edit" /> 
      </td> 
      <td> 
       <asp:DynamicControl runat="server" DataField="ProductName" Mode="Edit" /> 
      </td> 
      <td> 
       <asp:DynamicControl runat="server" DataField="Supplier" Mode="Edit" /> 
      </td> 
      <td> 
       <asp:DynamicControl runat="server" DataField="UnitPrice" Mode="Edit" /> 
      </td> 
      <td> 
       <asp:DynamicControl runat="server" DataField="Discontinued" Mode="Edit" /> 
      </td> 
     </tr> 
    </ItemTemplate> 
    <LayoutTemplate> 
     <table runat="server"> 
      <tr runat="server"> 
       <td runat="server"> 
        <table id="itemPlaceholderContainer" runat="server" border="0"> 
         <tr runat="server"> 
          <th runat="server"> 
           ProductID 
          </th> 
          <th runat="server"> 
           ProductName 
          </th> 
          <th runat="server"> 
           Supplier 
          </th> 
          <th runat="server"> 
           UnitPrice 
          </th> 
          <th runat="server"> 
           Discontinued 
          </th> 
         </tr> 
         <tr id="itemPlaceholder" runat="server"> 
         </tr> 
        </table> 
       </td> 
      </tr> 
      <tr runat="server"> 
       <td runat="server"> 
       </td> 
      </tr> 
     </table> 
    </LayoutTemplate> 
</asp:ListView> 

<asp:EntityDataSource ID="theDataSource" runat="server" 
     ConnectionString="name=NorthwindEntities" 
     DefaultContainerName="NorthwindEntities" EnableDelete="True" 
     EnableFlattening="False" EnableInsert="True" EnableUpdate="True" 
     Include="Supplier" 
     EntitySetName="Products"> 
    </asp:EntityDataSource> 
</asp:Content> 

Test.aspx.vb

Imports System.Web.DynamicData 
Imports DAL 

Partial Class Test 
Inherits System.Web.UI.Page 

Protected table As MetaTable 

Protected Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init 
    Listview1.EnableDynamicData(GetType(Product)) 
    table = theDataSource.GetTable() 
    Title = table.DisplayName 
End Sub 
End Class 

ответ

1

Проблема решена. Когда все это началось, я изначально получил сообщение об ошибке:

Не удалось определить MetaTable. MetaTable не может быть определен для источника данных «EntityDataSource1», и нельзя было вывести его из URL-адреса запроса. Убедитесь, что таблица отображаются на источник Dats, или что источник данных сконфигурирован с действительным типом контекста и именем таблицы, или что запрос является частью зарегистрированного DynamicDataRoute

Попытки проследить, что вниз во главе мне избавиться от осины: DynamicDataManager разметки, и заменить его в коде-позади с:

Listview1.EnableDynamicData(GetType(Product)) 
table = theDataSource.GetTable() 

что же получается, что привел меня пресловутую кроличью нору ... в то время как избавился от Метастабильного ошибка, это непреднамеренно вызвало проблему, о которой я писал выше. Огромное спасибо: http://daviworld.net/?tag=/DynamicDataManager, который указывает, что это сообщение об ошибке на самом деле вызвано:

Это связано с проблемой с генерацией кода Designer. Когда вы выбираете DataSource для элемента GridView, он не добавляет атрибут ContextTypeName в EntityDataSourceControl.

После того, как я удалил строки кода выше, и добавил обратно в аспида: DynamicDataManager к разметке, а затем добавили ContextTypeName = «DAL.NorthwindEntities» к EntitiyDataSource, теперь все работает, как хотелось бы его к.

0

Да, верно, что вы сказали. im в том же месте, где вы застряли. я бегу от столба, чтобы отправить с огнем в моем животе, но я предполагаю, что он может скоро потушить.

Как это может быть так скручено, что вы не можете работать за пределами механизма лесов, все, что вы действительно делаете, это заимствование динамического datamanager, так что вы можете оставаться темплатированным как по своей структуре, так и по вашей недавно добавленной структуре.

способ, которым я попал в это отверстие, - это когда я пытаюсь отобразить несколько данных сущностей на одной странице. Правилом большого пальца кажется единая сущность, одна страница. какова бы ни была ошибка im на da. дайте ему еще несколько дней, прежде чем я снова открою бутылку .. пусть будет пиво !!!