Сначала предыстория: я создал проект динамических данных 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 все данные будут автоматически связаны и обновляться за один раз.