Можно ли редактировать коллекции сущностей в ASP.Net GridView, которые являются свойствами навигации? - PullRequest
1 голос
/ 15 декабря 2011

Сначала предыстория: я создал проект динамических данных ASP.NET в VS2010. По умолчанию файл Children.ascx в папке FieldTemplates отображает гиперссылку при отображении дочерних элементов сущности. Когда вы нажимаете на ссылку, вы переходите на отдельную веб-страницу для другой таблицы. Для моих конкретных целей это нежелательно. Я хотел бы включить детей прямо на родительской странице, поскольку все они вместе составляют запись для моих целей.

Я изменил файл Children.ascx и заменил гиперссылку GridView. Код выглядит так:

<asp:GridView ID="gridView1" runat="server" DataKeyNames="ID" 
 DataSource="<%#FieldValue%>" AutoGenerateEditButton="True" 
 AutoGenerateDeleteButton="true" OnRowEditing="GridView1_RowEditing" 
 OnRowCreated="GridView1_RowCreated"
 HeaderStyle-CssClass="th" CellPadding="6">
    <EmptyDataTemplate>
        There are currently no items in this table.
    </EmptyDataTemplate>
</asp:GridView>

Ничего особенного, важная часть - это просто свойство "FieldValue", полученное из шаблона поля. Это передаваемая коллекция сущностей. В событии OnRowEditing ничего не происходит, он просто жаловался, когда он не обрабатывался, поэтому я добавил обработчик.

Когда я запускаю проект, он отображается просто отлично. Дочерняя коллекция отображается в GridView так, как я хочу. Однако, когда я нажимаю кнопку «Изменить» в любом ряду, все столбцы исчезают. Строки все еще существуют, поэтому кажется, что GridView все еще знает, что у него есть данные, но столбцы не генерируются автоматически (хотя это свойство не указано в приведенном выше коде, оно установлено по умолчанию.)

После долгих чтений я обнаружил, что GridView не могут привязываться к свойствам в свойствах навигации. Например, если у меня есть Table1 со свойством навигации Table2, я не могу привязаться к Table2.Column1, мне придется использовать Eval. Однако мне было интересно, поскольку в этом случае я передаю всю коллекцию сущностей в GridView, если эта проблема будет решена. Вот тут-то и возникает мой вопрос. Учитывая мои настройки, возможно ли заставить GridView разрешить редактирование или я SOL?

Если это невозможно, каков рекомендуемый способ выполнения моих действий (редактирование родительских и дочерних элементов на одной странице) на сайте с динамическими данными? Я знаю, что могу перетащить несколько EntityDataSources на страницу и просто отобразить отдельные GridView для детей на них, но в ходе тестирования я обнаружил, что моя главная таблица автоматически загружает ее дочерние элементы. Кажется, что это пустая трата для создания новых EntityDataSources для загрузки данных, которые уже есть. Кроме того, с одним EntityDataSource все данные будут автоматически связаны и обновляться за один раз.

1 Ответ

0 голосов
/ 09 октября 2012

Родительские дочерние отношения, скорее всего, определены в вашем EDMX. Динамические данные затем используют шаблон поля «Дети» на основе этого отношения.

Вам нужны два пользовательских элемента управления, один для отображения (Children.ascx) и один для вставки (Children_Insert.ascx). Тем не менее, я бы оставил эти два файла в покое и добавил два новых: что-то вроде ChildrenGrid.ascx и ChildrenGrid_Insert.ascx и связал бы их в метаданных с

[UIHint("ChildrenGrid")]
...