Главная страница

Новые Лпр-ки. Веб ЛПР новые (1). Лабораторная работа Разработка базовой основы Web приложения 5 Упражнение Создание Web приложения 5


Скачать 1.04 Mb.
НазваниеЛабораторная работа Разработка базовой основы Web приложения 5 Упражнение Создание Web приложения 5
АнкорНовые Лпр-ки
Дата19.03.2022
Размер1.04 Mb.
Формат файлаdocx
Имя файлаВеб ЛПР новые (1).docx
ТипЛабораторная работа
#403967
страница20 из 27
1   ...   16   17   18   19   20   21   22   23   ...   27

Упражнение 2. Применение отношения многое ко многим


Отношения между Courses и People многие-ко-многим. В этом упражнении вы будете добавлять и удалять отношения между Person Человек и Course курс лиц, обновляя свойства навигации соответствующих сущностей.

  1. Создайте новую страницу InstructorsCourses.aspx которая основана на мастер странице Site.Master и добавьте код разметки элемента Content с именем Content2:

Assign Instructors to Courses or Remove from Courses


runat="server"

ConnectionString="name=SchoolEntities" DefaultContainerName="SchoolEntities"

EnableFlattening="False" EntitySetName="People"

Where="it.HireDate is not null" Select="it.LastName + ', ' + it.FirstMidName AS Name, it.PersonID">

Select an Instructor:

runat="server" DataSourceID="InstructorsEntityDataSource"

AutoPostBack="true" DataTextField="Name" DataValueField="PersonID"
OnSelectedIndexChanged="InstructorsDropDownList_SelectedIndexCh anged"

OnDataBound="InstructorsDropDownList_DataBound">





Assign a Course


Select a Course:

runat="server"

DataTextField="Title" DataValueField="CourseID">


Text="Assign" OnClick="AssignCourseButton_Click" />
Visible="false" Text="Assignment successful">



Remove a Course


Select a Course:

runat="server"

DataTextField="title" DataValueField="courseiD">


Text="Remove" OnClick="RemoveCourseButton_Click" />
Visible="false" Text="Removal successful">

Это код разметки создает элемент EntityDataSource, который извлекает имя и PersonId объекта Person для инструкторов. Элемент DropDrownList связан с элементом EntityDataSource. DropDrownList определяет обработчик для события DataBound с привязкой к данным. Вы будете использовать этот обработчик привязки двух раскрывающихся списков, которые отображают курсы.

Разметка также создает следующую группу элементов управления, чтобы использовать их для присвоения курса к выбранному инструктору:


  • DropDownList для выбора назначаемого курса. Этот элемент будет заполнен курсами, которые в настоящее время не назначенные выбранному инструктору.

  • Button для начала выполнения действия.

  • Label для отображения сообщения об ошибке.

Наконец, разметка также создает группу элементов управления, чтобы использовать удаление курса для выбранного инструктора.

  1. В файл InstructorsCourses.aspx.csдобавьте выражение using:

using ContosoUniversity.DAL;

  1. Добавьте метод для заполнения двух выпадающих списков, отображающих курсы:

private void PopulateDropDownLists()

{

using (var context = new SchoolEntities())

{

var allCourses = (from c in context.Courses

select c).ToList();
var instructorID = Convert.ToInt32(InstructorsDropDownList.SelectedValue);

var instructor = (from p in context.People.Include("Courses")

where p.PersonID == instructorID

select p).First();
var assignedCourses = instructor.Courses.ToList();

var unassignedCourses = allCourses.Except(assignedCourses.AsEnumerable()).ToList();
UnassignedCoursesDropDownList.DataSource = unassignedCourses;

UnassignedCoursesDropDownList.DataBind();

UnassignedCoursesDropDownList.Visible = true;
AssignedCoursesDropDownList.DataSource =

assignedCourses;

AssignedCoursesDropDownList.DataBind(); AssignedCoursesDropDownList.Visible = true;

}

}

В методе выполняется запрос получения всех курсов. Затем определяется, какие курсы назначаются для инструктора и заполняются соответствующие раскрывающиеся списки,

  1. Добавьте обработчик события Click для кнопки Assign: protected void AssignCourseButton_Click(object sender,

EventArgs e)

{

using (var context = new SchoolEntities())

{

var instructorID = Convert.ToInt32(InstructorsDropDownList.SelectedValue);

var instructor = (from p in context.People where p.PersonID == instructorID select p).First();

var courseID = Convert.ToInt32(UnassignedCoursesDropDownList.SelectedValue);

var course = (from c in context.Courses

where c.CourseID == courseID select c).First();

instructor.Courses.Add(course); try

{



successful.";

context.SaveChanges(); PopulateDropDownLists(); CourseAssignedLabel.Text = "Assignment
}

catch (Exception)

{


unsuccessful.";
}

CourseAssignedLabel.Text = "Assignment
//Add code to log the error.

CourseAssignedLabel.Visible = true;

}

}

В методе реализовывается получение объекта Person для выбранного инструктора, получение объекта Course для выбранного курса, и добавление выбранного курса для свойства навигации Courses для сущности Person. Затем сохраняются изменения в базу данных и повторно заполняются раскрывающиеся списки, так что результаты можно увидеть сразу.

  1. Добавьте обработчик события Click для кнопки Remove:

protected void RemoveCourseButton_Click(object sender, EventArgs e)

{

using (var context = new SchoolEntities())

{

var instructorID = Convert.ToInt32(InstructorsDropDownList.SelectedValue);

var instructor = (from p in context.People

where p.PersonID == instructorID select p).First();

var courseID = Convert.ToInt32(AssignedCoursesDropDownList.SelectedValue);

var courses = instructor.Courses; var courseToRemove = new Course(); foreach (Course c in courses)

{

if (c.CourseID == courseID)

{



}

}

try

{

courseToRemove = c; break;


successful.";

courses.Remove(courseToRemove); context.SaveChanges(); PopulateDropDownLists(); CourseRemovedLabel.Text = "Removal
}

catch (Exception)

{


unsuccessful.";
}

CourseRemovedLabel.Text = "Removal
//Add code to log the error.

CourseRemovedLabel.Visible = true;

}
}

В методе реализовывается получение объекта Person для выбранного инструктора, получение объекта Course для выбранного курса, и удаление выбранного курса для свойства навигации Courses для сущности Person. Затем сохраняются изменения в базу данных и повторно заполняются раскрывающиеся списки, так что результаты можно увидеть сразу.

  1. Добавьте реализацию обработчика события загрузки страницы Page_Load, в котором реализуется скрытие сообщений об ошибках в случае их отсутствия

protected void Page_Load(object sender, EventArgs e)

{

CourseAssignedLabel.Visible = false; CourseRemovedLabel.Visible = false;

}

  1. Добавьте обработчики событий DataBound и

SelectedIndexChanged выпадающего списка инструкторов:
protected void InstructorsDropDownList_DataBound(object sender, EventArgs e)

{

PopulateDropDownLists();

}
protected void InstructorsDropDownList_SelectedIndexChanged(object sender, EventArgs e)

{

PopulateDropDownLists();

}

  1. Запустите страницу в обозревателе.

  2. Выберите инструктора. В выпадающем списке Assign a Course

выберите курс и нажмите кнопку Assign.

  1. Перейдите на страницу списка инструкторов. Выберите инструктора и убедитесь, что курс добавился для этого инструктора.



1   ...   16   17   18   19   20   21   22   23   ...   27


написать администратору сайта