Столбцы двух связанных таблиц базы данных в одном ASP.NET GridView с EntityDataSource
У меня есть две таблицы SQL Server с первичными ключами (PK) и внешний ключ (FK), связывающий две таблицы:
1) Table "Order" OrderID, int, PK AddressID, int, FK ... 2) Table "Address" AddressID, int, PK City, nvarchar(50) ...
Затем я создал (ADO.NET) Entity Data Model из этих двух таблиц. Теперь на моей (ASP.NET) веб-странице я поставил GridView с EntityDataSource. В моем GridView я хочу отобразить два столбца:
- Номер заказа
- Город (принадлежащий этому заказу и связанный с помощью ключа AddressID)
Как я могу это сделать? Моя проблема: когда я настраиваю источник данных сущностей, я могу выбрать «EntitySetName», которое может быть либо «Заказ», либо «Адрес», но не оба, и я не могу выбрать какие-либо отношения. Если я выберу «Заказ» в качестве EntitySetName, то в GridView я могу добавить столбцы
- как связать выпадающий список в gridview?
- Редактирование строки Gridview - динамическое связывание с DropDownList
- Как добавить параметр «подтвердить удаление» в ASP.Net Gridview?
- Android gridview сохраняет выбранный элемент
- Простой пример сетки Android, использующий RecyclerView с GridLayoutManager (например, старый GridView)
- Номер заказа
- Адрес
- Address.AddressID
Добавление столбца «Адрес» отображает пустые ячейки. Добавление «OrderID» и «Address.AddressID» отображает ожидаемые идентификаторы. Но как я могу добавить «Город» связанного адреса в свой GridView?
Благодарим вас за помощь!
Изменить: Уточнение:
Entity Framework создал class «Заказ» и class «Адрес», соответствующий таблицам базы данных. Класс «Заказ» имеет ссылку на объект «Адрес» в качестве свойства навигации, соответствующий 1-n отношениям между таблицей адресов и заказов.
В принципе, я хочу иметь столбец в моем GridView, который отображает Order.Address.City. Я попытался добавить связанное поле с «Address.City» в качестве поля данных в GridView, но это приводит к ошибке времени выполнения («нет такого свойства …»).
- Пейджинговые и сортировочные сетки с ASP.Net MVC
- Как реализовать выбор полной строки в GridView без кнопки выбора?
- как найти элемент управления в шаблоне редактирования элемента?
- Как найти элемент управления в TemplateField GridView?
- Сетка изображений внутри ScrollView
- Полная обратная передача, вызванная LinkButton внутри GridView внутри UpdatePanel
- Android: Как GridView auto_fit находит количество столбцов?
- Добавление заголовка в GridView (Android)
Хорошо, слишком много часов спустя я нашел решение самостоятельно:
Опция 1:
В свойстве EntityDataSource можно использовать свойство select, которое позволяет создавать произвольные проекции данных из нескольких связанных объектов / таблиц базы данных (в моем случае: OrderID из объекта Order и City из объекта Address)
Недостаток: использование select в EntityDataSource делает невозможным использование Insert, Update и Delete в GridView!
Вариант 2:
EntityDataSource должен иметь свойство include для включения связанного свойства адреса вместе с запрошенными заказами. Разметка выглядит так:
Тогда коллекция столбцов GridView может иметь поле шаблона, подобное этому:
Здесь Эваль важен. Привязка не работает. Также используя BoundField в качестве столбца …
… НЕВОЗМОЖНО . Поэтому в GridView невозможно редактировать город (что имеет смысл, потому что его связанная область принадлежит другой таблице и, возможно, ко многим другим заказам). Но можно редактировать плоские поля объекта заказа, а также «AddressID» для заказа другого адреса.