Новые Лпр-ки. Веб ЛПР новые (1). Лабораторная работа Разработка базовой основы Web приложения 5 Упражнение Создание Web приложения 5
Скачать 1.04 Mb.
|
Упражнение 1. Отображение и обновление связанных данных в элементе GridViewСоздайте новую страницу Instructors.aspx, основанная на странице Site.Master и добавьте следующую разметку в элемент Content с именем Content2: InstructorsConnectionString="name=SchoolEntities" DefaultContainerName="SchoolEntities" EnableFlattening="False" EntitySetName="People" Where="it.HireDate is not null" Include="OfficeAssignment" EnableUpdate="True"> Эта разметка создает элемент EntityDataSource, который выбирает инструкторов и позволяет выполнять обновления. Между разметкой EntityDataSource и закрывающим тегом добавьте код разметки для создания элементов GridView и Label (этот элемент будет отображать сообщения об ошибках): AutoGenerateColumns="False" DataKeyNames="PersonID" DataSourceID="InstructorsEntityDataSource" OnSelectedIndexChanged="InstructorsGridView_SelectedIndexChanged" SelectedRowStyle-BackColor="LightGray" onrowupdating="InstructorsGridView_RowUpdating"> %>'> %>'> Text='<%# Eval("OfficeAssignment.Location") %>' Width="7em" oninit="InstructorOfficeTextBox_Init"> Элемент GridView позволяет выбрать строку, подчеркивает выбранную строку с легким серым фоном, и определяет обработчики событий (которые вы создадите позже) SelectedIndexChanged и Updating. Он также указывает PersonId для свойства DataKeyNames, так что значение ключа выбранной строки могут быть переданы другому элементу управления, что вы будете добавлять позже. В последнем столбце содержится значение офиса инструктора, который хранится в навигационном свойстве сущности Person, потому что он приходит от соответствующего экземпляра. Обратите внимание, что элемент EditItemTemplate определяет Eval вместо Bind, потому что GridView управления не может непосредственно связываться с навигационными свойствами для того, чтобы обновить их. Вы обновить назначение офис в коде. Чтобы сделать это, вам нужно ссылка элемент TextBox, и вы получите и сохраните, что в случае события Init элемента управления TextBox. После элемента GridView добавлен элемент Label, который используется для сообщений об ошибках. Свойство Visible изначально установлено в false и состояние просмотра отключено, так что сообщение появится только тогда, когда произойдет ошибка. Откройте файл Instructors.aspx.cs и добавьте выражение using: using ContosoUniversity.DAL; Добавьте ссылку на текстовое поле непосредственно после объявления класса: private TextBox instructorOfficeTextBox; Добавьте заглушку обработчика события SelectedIndexChanged (код будет добавлен позже). protected void InstructorsGridView_SelectedIndexChanged(object sender, EventArgs e) { } Добавьте обработчик события Init элемента управления InstructorOfficeTextBox, в котором сохраните ссылку на элемент TextBox. Вы будете использовать эту ссылку, чтобы получить значение, введенное пользователем при обновлении. protected void InstructorOfficeTextBox_Init(object sender, EventArgs e) { instructorOfficeTextBox = sender as TextBox; } Вы будете использовать событие Updating элемента GridView, чтобы обновить свойство Location, связанное с сущностью OfficeAssignment. Добавьте следующий обработчик для события Updating: protected void InstructorsGridView_RowUpdating(object sender, GridViewUpdateEventArgs e) { using (var context = new SchoolEntities()) { var instructorBeingUpdated = Convert.ToInt32(e.Keys[0]); var officeAssignment = (from o in context.OfficeAssignments instructorBeingUpdated try { where o.InstructorID == select o).FirstOrDefault(); if (String.IsNullOrWhiteSpace(instructorOfficeTextBox.Text) == false) { if (officeAssignment == null) { context.OfficeAssignments.AddObject(OfficeAssignment.Creat eOfficeAssignment(instructorBeingUpdated, instructorOfficeTextBox.Text, null)); } else { officeAssignment.Location = instructorOfficeTextBox.Text; } } else { if (officeAssignment != null) { context.DeleteObject(officeAssignment); } } context.SaveChanges(); } catch (Exception) { e.Cancel = true; ErrorMessageLabel.Visible = true; failed."; } } ErrorMessageLabel.Text = "Update //Add code to log the error. } Этот код запускается, когда пользователь нажимает Update в строке элемента GridView. Код использует LINQ to Entities, чтобы получить сущность OfficeAssignment, которая связана с текущей сущностью Person, используя PersonId выбранной строки из аргумента события. Запустите страницу Instructors.aspxв обозревателе. Кликните Edit (Правка), отобразятся текстовые поля. 10.Измените все значения, в том числе и поле Office Assignment. Кликните Update (Обновить) и вы увидите изменения, отраженные в списке. |