|
|
преподавателя из коллекции |
|
|
|
db.ProfessorSet |
|
|
|
|
|
10 |
} |
|
|
|
|
|
|
11 |
} |
|
|
|
|
|
|
12 |
buttonShowProfessors.Text = "Просмотр"; |
Изменение надписи кнопки |
|
buttonShowProfessors на «Просмотр» |
|||
|
|
||
|
|
|
|
13 |
} |
|
|
|
|
|
|
|
|
Если условие в строке 3 ложно, то |
|
14 |
else if(buttonShowProfessors.Text == "Просмотр") |
производится проверка на равенство надписи |
|
кнопки buttonShowProfessors значению |
|||
|
|
||
|
|
"Просмотр" |
|
|
|
|
|
15 |
{ |
|
|
|
|
|
|
|
this.FormProfessorInfo = new |
Создание формы FormProfessorInfo и |
|
16 |
передача в конструктор формы ссылки на |
||
FormProfessorInfo(this); |
|||
|
экземпляр текущего класса (формы) |
||
|
|
||
|
|
|
|
17 |
using (EntityModelContainer db = new |
Создание объекта db контекста данных |
|
EntityModelContainer()) |
EntityModelContainer |
||
|
|||
|
|
|
|
18 |
{ |
|
|
|
|
|
|
|
Цикл для обработки элементов коллекции |
|
19 |
foreach (Professor professor in db.ProfessorSet) |
db.ProfessorSet (коллекция сущностей |
|
|
|
ProfessorSet из базы данных) |
|
|
|
|
|
20 |
{ |
|
|
|
|
|
|
|
|
Проверка на равенство значения свойства |
|
|
|
Name объекта professor из коллекции |
|
21 |
if (professor.Name == |
db.ProfessorSet элементу, выбранному в |
|
Convert.ToString(listBoxLecturer.SelectedItem)) |
списке listBoxLecturer (свойство |
||
|
|||
|
|
SelectedItem возвращает значение |
|
|
|
выбранного элемента в списке) |
|
|
|
|
|
|
|
Если условие в строке 21 истинно, то в |
|
22 |
{ |
таблице ProfessorSet базы данных был |
|
найден объект professor с именем, которое |
|||
|
|
||
|
|
выбрано в списке listBoxLecturer |
|
|
|
|
|
23 |
this.FormProfessorInfo.Show(); |
Открытие формы FormProfessorInfo |
|
|
|
|
|
24 |
this.FormProfessorInfo.richTextBoxName.Text = |
Изменение текста элемента |
|
professor.Name; |
richTextBoxName на значение свойства |
||
|
|||
|
|
|
|
|
Name объекта professor (ФИО |
|
|
|
преподавателя) |
|
|
|
|
|
|
|
Изменение текста элемента |
|
25 |
this.FormProfessorInfo.richTextBoxPosition.Text = |
richTextBoxPosition на значение |
|
professor.Position; |
свойства Position объекта professor |
||
|
|||
|
|
(Должность преподавателя) |
|
|
|
|
|
|
|
Изменение текста элемента |
|
26 |
this.FormProfessorInfo.richTextBoxPersonalData.Text |
richTextBoxPersonalData на значение |
|
= professor.PersonalData; |
свойства PersonalData объекта professor |
||
|
|||
|
|
(Информация «О себе» преподавателя) |
|
|
|
|
|
|
|
Изменение отображаемого изображения в |
|
|
this.FormProfessorInfo.pictureBoxPhoto.Image = |
pictureBoxPhoto путем последовательного |
|
27 |
(Image)((new |
преобразования массива байтов, хранящихся |
|
|
ImageConverter()).ConvertFrom(professor.Photo)); |
в свойстве Photo объекта professor в тип |
|
|
|
данных Image |
|
|
|
|
|
28 |
}}} |
|
|
|
|
|
|
29 |
this.Visible = false; |
Скрытие формы профиля студента |
|
|
|
|
|
30 |
}} |
|
|
|
|
|
§17.17.4 Добавление темы дипломной работы
Добавление темы происходит по нажатию кнопки Добавить в форме профиля преподавателя. Тема дипломной работы записывается в текстовое поле richTextBoxNameThesis.
Предварительно рассмотрим реализацию конструкторы формы профиля преподавателя.
|
Листинг 17.6 – Конструктор формы профиля преподавателя |
|
|
|
|
1 |
Form1 Form1; |
|
2 |
User User; |
|
3 |
public FormProfessorAccount(Form1 form1, User user) |
|
4 |
{ |
|
5 |
InitializeComponent(); |
|
6 |
this.Form1 = form1; |
|
7 |
this.User = user; |
|
8 |
this.UpdateListBoxTheses(); |
|
9 |
} |
|
Конструктор принимает в качестве параметра ссылку на форму авторизации form1 для возможности перехода в нее обратно и ссылку на объект user, для которого будет происходить открытие профиля, и
информация о котором будет появляться в открываемой форме.
При реализации добавления используем запросы LINQ.
LINQ to Entities предлагает простой и интуитивно понятный подход для получения данных с помощью выражений, которые по форме близки выражениям языка SQL.
Хотя при работе с базой данных мы оперируем запросами LINQ, но база данных понимает только запросы на языке SQL. Поэтому между LINQ to Entities и базой данных есть проводник, который позволяет им взаимодействовать. Этим проводником является провайдер EntityClient. Он создает интерфейс для взаимодействия с провайдером ADO.NET для SQL Serverа.
Для начала взаимодействия с базой данных создается объект
EntityConnection. Через объект EntityCommand он отправляет запросы, а с помощью объекта EntityDataReader считывает извлеченные из базы данных
данные. Однако разработчику не надо напрямую взаимодействовать с этими объектами, фреймворк все сделает за него. Задача же разработчика сводится в основном к написанию запросов к базе данных с помощью LINQ.
Рассмотрим реализацию метода обработчика события нажатия на кнопку Добавить, которая представлена в листинге 17.7.
Листинг 17.7 – Добавление темы
1 |
private User User; |
|
2 |
private void buttonAddThesis_Click(object sender, |
|
EventArgs e) |
||
|
||
3 |
{ |
|
4 |
using(EntityModelContainer db = new |
|
EntityModelContainer()) |
||
|
||
5 |
{ |
|
|
Professor ModifiableProfessor = |
|
6 |
(from p in db.ProfessorSet |
|
where p.Name == User.Professor.Name |
||
|
||
|
select p).FirstOrDefault(); |
|
|
Thesis thesis = new Thesis() { Name = |
|
7 |
richTextBoxNameThesis.Text, Annotation = |
|
richTextBoxNameThesis.Text, Professor = |
||
|
||
|
ModifiableProfessor }; |
|
8 |
db.ThesisSet.Add(thesis); |
|
9 |
ModifiableProfessor.Thesis.Add(thesis); |
|
10 |
db.SaveChanges(); |
|
11 |
} |
|
12 |
this.UpdateListBoxTheses(); |
|
13 |
} |
Встроке 6 создается объект ModifiableProfessor класса Professor,
вкоторый сохраняется результат запроса LINQ на выборку. В данном запросе мы отбираем элементы p из коллекции, у которых свойство Name равно значению аналогичного свойства у объекта User.Professor. User хранит данные об объекте-пользователе, для которого открыта форма профиля. Метод
FirstOrDefault() получает первый элемент полученной выборки (в данном случае – преподавателя, для которого выполнено условие выборки). Если выборка пуста, то он возвращает значение null.