При добавлении темы создается объект 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 (аналогичное просмотрю информации о преподавателе).