Материал: Глава 17.3 Entity Framework

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

При добавлении темы создается объект thesis класса Thesis и

инициализируются его свойства: Name, Annotation и Professor.

Свойству

Professor объекта thesis присваивается ссылка на

объект

ModifiableProfessor.

После создания темы происходит закрепление темы дипломного проекта за преподавателем. Для этого происходит обращение к свойству-коллекции

Thesis объекта ModifiableProfessor и добавление в нее ранее созданной темы thesis.

Метод UpdateListBoxTheses обновляет содержимое списка тем дипломных проектов. Его реализация представлена в листинге 17.8.

Листинг 17.7 – Обновление списка

1

private void UpdateListBoxTheses()

 

 

 

2

{

 

 

 

 

3

this.listBoxTheses.Items.Clear();

 

 

 

4

using

(EntityModelContainer

db

=

new

EntityModelContainer())

 

 

 

 

 

 

 

5

{

 

 

 

 

 

var ThesesList =

 

 

 

 

from t in db.ThesisSet

 

 

 

6

where t.Professor.Name == (from p in db.ProfessorSet

 

where p.Name == User.Professor.Name

 

 

 

 

select p).FirstOrDefault().Name

 

select t;

 

 

 

 

7

foreach (Thesis thesis in ThesesList)

 

 

8

{

 

 

 

 

9

this.listBoxTheses.Items.Add(thesis.Name);

 

 

10

}

 

 

 

 

11

}

 

 

 

 

12}

Встроке 6 реализован запрос LINQ – здесь идет выборка тем

дипломных проектов у преподавателя.

§17.17.5 Редактирование темы дипломной работы

Редактирование темы происходит по нажатию кнопки Изменить в

форме профиля преподавателя. Измененная тема дипломной работы записывается в текстовое поле richTextBoxNewName.

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

Листинг 17.9 – Редактирование темы

1

private void buttonChangeThesis_Click(object

sender,

EventArgs e)

 

 

 

 

 

 

 

2

{

 

 

 

3

using(EntityModelContainer

db

=

new

EntityModelContainer())

 

 

 

 

 

 

 

4

{

 

 

 

5

string

str

 

=

Convert.ToString(listBoxTheses.SelectedItem);

 

 

 

 

Thesis ModifiableThesis =

 

 

 

6

 

(from t in db.ThesisSet

 

where t.Name == str

 

 

 

 

select t).FirstOrDefault();

7

ModifiableThesis.Name = richTextBoxNewName.Text;

8

db.SaveChanges();

 

 

 

9

}

 

 

 

10

this.UpdateListBoxTheses();

 

 

11

}

 

 

 

В строковую переменную str сохраняется наименование темы,

выбранной в списке listBoxTheses. В строке 6 происходит создание объекта

ModifiableThesis класса Thesis, которому присваивается результат выполнения запроса на выборку, где ищется совпадение наименования темы каждой дипломной работы t.Name, хранящейся в таблице ThesisSet базы данных со строкой str. В строке 7 происходит обращение к свойству Name

объекта ModifiableThesis и присваивание ему нового значение, которое будет задано в текстовом поле richTextBoxNewName, то есть происходит изменение наименования темы дипломной работы, найденной в базе данных.

§17.17.6 Удаление темы дипломной работы

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

Реализация метода обработчика события нажатия на кнопку Удалить

представлена в листинге 17.10.

Листинг 17.10 – Удаление темы

1

private

void buttonDeleteThesis_Click(object

sender,

EventArgs e)

 

 

 

 

 

 

 

2

{

 

 

 

 

3

using

(EntityModelContainer

db

=

new

EntityModelContainer())

 

 

 

 

 

 

 

4

{

 

 

 

 

5

string

str

 

 

=

Convert.ToString(listBoxTheses.SelectedItem);

 

 

 

 

Thesis ModifiableThesis = (from t in db.ThesisSet

6

where t.Name == str

 

 

 

 

select t).FirstOrDefault();

 

 

 

7

db.ThesisSet.Remove(ModifiableThesis);

 

 

8

db.SaveChanges();

 

 

 

9

}

 

 

 

 

10

this.UpdateListBoxTheses();

 

 

 

11

}

 

 

 

 

Реализация удаления темы мало отличается от метода редактирования темы. Единственное отличие – строка 7. В ней происходит вызов метода

Remove коллекции ThesisSet, который выполняет удаление объекта

ModifiableThesis.

§17.17.7 Просмотр информации о студентах

Форма просмотра информации о студентах открывается через профиль преподавателя при нажатии на кнопку Поиск студентов.

Реализация метода обработчика события нажатия на кнопку Поиск студентов представлена в листинге 17.11.

Листинг 17.11 – Поиск студентов

1

private void buttonFind_Click(object sender, EventArgs e)

2 {

3

FormOverviewStudent

formOverviewStudent

=

new

FormOverviewStudent(this);

 

 

 

 

 

4

formOverviewStudent.Show();

 

 

5

this.Visible = false;

 

 

 

6

}

 

 

 

При нажатии на кнопку в строке 3 создается форма просмотра информации о студентах formOverviewStudent, конструктор которой принимается ссылку на текущую форму. В строке 4 происходит открытие

новой формы, а в строке 5 – закрытие формы профиля преподавателя.

Реализация конструктора класса формы представлена в листинге 17.12.

Листинг 17.12 – Конструктор формы FormOverviewStudent

1

public

FormOverviewStudent(FormProfessorAccount

formProfessorAccount)

 

 

 

 

 

 

 

2

{

 

 

 

 

3

InitializeComponent();

 

 

 

4

this.FormProfessorAccount = formProfessorAccount;

 

5

using

(EntityModelContainer

db

=

new

EntityModelContainer())

 

 

 

 

 

 

 

6

{

 

 

 

 

7

foreach (User user in db.UserSet)

 

 

 

8

{

 

 

 

 

9

if (user.Student != null)

 

 

 

10

{

 

 

 

 

11

listBoxStudents.Items.Add(user.Student.Name);

 

12

}

 

 

 

 

13

}

 

 

 

 

14

}

 

 

 

 

15

}

 

 

 

 

В конструкторе происходит заполнение списка listBoxStudents

элементами коллекции db.UserSet, которые являются студентами.

Проверить на принадлежность пользователя роли студента можно, сравнив свойство Student на неравенство значению null или на равенство свойства

Role значению «Студент».

Вывод информации о студенте происходит при выборе ФИО студента в списке listBoxStudents. Реализация метода обработчика события нажатия на элемент списка представлен в листинге 17.13.

Листинг 17.13 – Вывод информации о выбранном студенте

 

private

 

 

 

 

void

1

listBoxStudents_SelectedIndexChanged(object

 

sender,

 

EventArgs e)

 

 

 

 

2

{

 

 

 

 

 

3

using

(EntityModelContainer

db

=

new

EntityModelContainer())

 

 

 

 

 

 

 

 

 

4

{

 

 

 

 

 

5

if (listBoxStudents.SelectedItem != null)

 

 

6

{

 

 

 

 

 

7

string

 

SelectedName

 

=

Convert.ToString(listBoxStudents.SelectedItem);

 

 

Student student =

 

 

 

 

8

 

 

(from s in db.StudentSet

 

 

where s.Name == SelectedName

 

 

 

 

 

 

select s).FirstOrDefault();

 

 

 

 

9

richTextBoxName.Text = student.Name;

 

 

10

richTextBoxNumberGroup.Text

 

 

=

 

Convert.ToString(student.NumberGroup);

 

 

11

richTextBoxPersonalData.Text = student.PersonalData;

12

pictureBoxPhoto.Image

=

(Image)(Image)((new

ImageConverter()).ConvertFrom(student.Photo));

 

13

}

 

 

 

 

 

14

else

 

 

 

 

 

15

{

 

 

 

 

 

16

MessageBox.Show("Ошибка выбора");

 

 

 

17

}

 

 

 

 

 

18

}

 

 

 

 

 

19

}

 

 

 

 

 

В строке 7 создается строковая переменная SelectedName, в которую сохраняется ФИО студента, выбранное в списке listBoxStudents. В строке

8 создается объект student, которому присваивается результат выполнения запроса на выборку, где ищется совпадение ФИО студента s.Name,

хранящейся в таблице StudentSet базы данных со строкой SelectedName.

Далее происходит вывод в соответствующие текстовые поля ФИО, номера группы и информации «О себе» выбранного в списке студента и вывод фотографии студента в pictureBoxPhoto (аналогичное просмотрю информации о преподавателе).

Источник: https://studfile.net/preview/16573806/