Лекции / Глава 17.3 Entity Framework
.pdf2 |
private void buttonOverview_Click(object sender, EventArgs |
||
e) |
|
|
|
3 |
{ |
|
|
4 |
OpenFileDialog open_dialog = new OpenFileDialog(); |
|
|
|
open_dialog.Filter |
= |
"Image |
5 |
Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG|All |
||
|
files (*.*)|*.*"; |
|
|
6 |
if (open_dialog.ShowDialog() == DialogResult.OK) |
|
|
7 |
{ |
|
|
8 |
try |
|
|
9 |
{ |
|
|
10 |
this.imageBytes = File.ReadAllBytes(open_dialog.FileName); |
||
11 |
labelLoadingStatus.Text = "Успешно"; |
|
|
12 |
} |
|
|
13 |
catch |
|
|
14 |
{ |
|
|
15 |
labelLoadingStatus.Text = "Ошибка"; |
|
|
16 |
} |
|
|
17 |
} |
|
|
18 |
} |
|
|
Для хранения картинок в памяти и сохранения в базе данных необходимо преобразовывать их в массив байтов. В строке 1 создается массив imageBytes, который будет хранить набор байтов. Поиск картинки происходит через диалоговое окно OpenFileDialog, экземпляр которого open_dialog создается в строке 4. Свойство Filter задает фильтр файлов,
благодаря чему в диалоговом окне можно отфильтровать файлы по расширению. Фильтр задается в следующем формате
Название_файлов|*.расширение
Например,
Текстовые файлы(*.txt)|*.txt
Можно задать сразу несколько фильтров, для этого они разделяются вертикальной линией |. Например,
Bitmap files (*.bmp)|*.bmp|Image files (*.jpg)|*.jpg
С помощью метода ShowDialog() происходит открытие диалогового
окна для открытия файла.
Рисунок 17.34 – Диалоговое окно для открытия файла
Если в окне была нажата кнопка «Открыть», то абсолютный путь до загружаемой картинки сохраняется в свойство FileName объекта open_dialog и передается в качестве параметра в метод ReadAllBytes,
который открывает этот файл, считывает содержимое файла в массив байтов imageBytes и затем закрывает файл. После корректного завершения загрузки файла в labelLoadingStatus выводится сообщение «Успешно». Если во время чтения возникнет исключение, то в labelLoadingStatus выведется сообщение «Ошибка».
Добавление нового пользователя в базу данных происходит по нажатию кнопки Зарегистрироваться (buttonReg). Реализация метода обработчика нажатия на кнопку Зарегистрироваться представлена в листинге 17.3.
|
|
Листинг 17.3. – Регистрация пользователя |
|
|
|
|
|
1 |
private void buttonReg_Click(object sender, |
Метод обработчик нажатия на кнопку buttonReg |
|
EventArgs e) |
|||
|
|
||
|
|
|
|
2 |
{ |
|
|
|
|
|
|
3 |
if (comboBoxRole.SelectedItem.ToString() == |
Проверка выбранной при регистрации роли на |
|
"Студент") |
соответствие значению «Студент» |
||
|
|||
|
|
|
|
4 |
{ |
|
|
|
|
|
|
5 |
using (EntityModelContainer db = new |
Создание объекта db контекста данных |
|
EntityModelContainer()) |
EntityModelContainer |
||
|
|||
|
|
|
|
6 |
{ |
|
|
|
|
|
|
|
Student student = new Student() { Name = |
|
|
|
textBoxFIO.Text, NumberGroup = |
Создание объекта student класса Student и |
|
7 |
int.Parse(textBoxNumGroup.Text), PersonalData = |
инициализация его свойств значениями, |
|
|
richTextBoxPersonalData.Text, Photo = |
введенными в соответствующие текстовые поля |
|
|
this.imageBytes }; |
|
|
|
|
|
|
|
|
Добавление созданного объекта student в |
|
8 |
db.StudentSet.Add(student); |
коллекцию сущностей StudentSet из контекста |
|
|
|
данных, отвечающую за хранение сущностей в |
|
|
|
|
|
|
базе данных |
|
|
|
|
|
9 |
db.SaveChanges(); |
Сохранение изменений результата запроса в базе |
|
данных |
|||
|
|
||
|
|
|
|
|
User user = new User() { Student = student, |
Создание объекта user класса User и |
|
|
инициализация его свойств значениями, |
||
|
Login = textBoxLogin.Text, Password = |
||
10 |
введенными в соответствующие текстовые поля |
||
textBoxPassword.Text, Role = |
|||
|
(навигационному свойству Student |
||
|
(string)comboBoxRole.SelectedItem }; |
||
|
присваивается созданный ранее объект student) |
||
|
|
||
|
|
|
|
|
|
Добавление созданного объекта user в |
|
11 |
db.UserSet.Add(user); |
коллекцию сущностей UserSet из контекста |
|
данных, отвечающую за хранение сущностей в |
|||
|
|
||
|
|
базе данных |
|
|
|
|
|
12 |
db.SaveChanges(); |
Сохранение изменений результата запроса в базе |
|
данных |
|||
|
|
||
|
|
|
|
13 |
} |
|
|
|
|
|
|
14 |
} |
|
|
|
|
|
|
15 |
else if (comboBoxRole.SelectedItem.ToString() == |
Проверка выбранной при регистрации роли на |
|
"Преподаватель") |
соответствие значению «Преподаватель» |
||
|
|||
|
|
|
16 |
{ |
|
|
|
|
|
|
17 |
using (EntityModelContainer db = new |
Создание объекта db контекста данных |
|
EntityModelContainer()) |
EntityModelContainer |
||
|
|||
|
|
|
|
18 |
{ |
|
|
|
|
|
|
|
Professor professor = new Professor() { Name = |
|
|
|
textBoxFIO.Text, Position = |
Создание объекта professor класса Professor |
|
19 |
textBoxNumGroup.Text, PersonalData = |
и инициализация его свойств значениями, |
|
|
richTextBoxPersonalData.Text, Photo = |
введенными в соответствующие текстовые поля |
|
|
this.imageBytes }; |
|
|
|
|
|
|
|
|
Добавление созданного объекта professor в |
|
20 |
db.ProfessorSet.Add(professor); |
коллекцию сущностей ProfessorSet из |
|
контекста данных, отвечающую за хранение |
|||
|
|
||
|
|
сущностей в базе данных |
|
|
|
|
|
21 |
db.SaveChanges(); |
Сохранение изменений результата запроса в базе |
|
данных |
|||
|
|
||
|
|
|
|
|
User user = new User() { Professor = professor, |
Создание объекта user класса User и |
|
22 |
инициализация его свойств значениями, |
||
Login = textBoxLogin.Text, Password = |
|||
|
введенными в соответствующие текстовые поля |
||
|
|
||
|
|
|
|
textBoxPassword.Text, Role = |
(навигационному свойству Professor |
|
|
(string)comboBoxRole.SelectedItem }; |
присваивается созданный ранее объект |
|
|
|
professor) |
|
|
|
|
|
|
|
Добавление созданного объекта user в |
|
23 |
db.UserSet.Add(user); |
коллекцию сущностей UserSet из контекста |
|
данных, отвечающую за хранение сущностей в |
|||
|
|
||
|
|
базе данных |
|
|
|
|
|
24 |
db.SaveChanges(); |
Сохранение изменений результата запроса в базе |
|
данных |
|||
|
|
||
|
|
|
|
25 |
} |
|
|
|
|
|
|
26 |
} |
|
|
|
|
|
|
27 |
this.Form1.Visible = true; |
Открытие формы авторизации |
|
|
|
|
|
28 |
this.Visible = false; |
Скрытие формы регистрации |
|
|
|
|
|
29 |
} |
|
|
|
|
|
§17.17.2 Авторизация пользователя
При авторизации пользователь вводит в форме авторизации свой логин
(textboxLogin), пароль (textBoxPassword) и нажимает на кнопку Войти
(buttonAuth).
Реализация метода обработчика нажатия на кнопку Войти представлена в листинге 17.4.
|
|
|
Листинг 17.4 – Авторизация пользователя |
||||||
|
|
|
|
|
|
|
|
||
1 |
FormReg FormReg; |
|
|
|
|
|
|
||
2 |
FormStudentAccount FormStudentAccount; |
|
|
|
|||||
3 |
FormProfessorAccount FormProfessorAccount; |
|
|
|
|||||
4 |
FormAdminPanel FormAdminPanel; |
|
|
|
|
|
|||
5 |
private void buttonAuth_Click(object sender, EventArgs |
|
|||||||
e) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
{ |
|
|
|
|
|
|
|
|
7 |
using(EntityModelContainer |
|
db |
= |
|
new |
|
||
EntityModelContainer()) |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|||
8 |
{ |
|
|
|
|
|
|
|
|
9 |
foreach (User user in db.UserSet) |
|
|
|
|
||||
10 |
{ |
|
|
|
|
|
|
|
|
11 |
if(user.Login == textBoxLogin.Text && user.Password == |
|
|||||||
textBoxPassword.Text && user.Role == "Студент") |
|
|
|
||||||
12 |
{ |
|
|
|
|
|
|
|
|
13 |
this.FormStudentAccount = new FormStudentAccount(this, |
|
|||||||
user); |
|
|
|
|
|
|
|
|
|
14 |
this.FormStudentAccount.Text |
= |
"Профиль |
" |
+ |
|
|||
user.Student.Name; |
|
|
|
|
|
|
|||
15 |
this.FormStudentAccount.labelStudentName.Text = "Добро |
|
|||||||
пожаловать, " + user.Student.Name; |
|
|
|
|
|||||
16 |
this.FormStudentAccount.Visible = true; |
|
|
|
|||||
17 |
this.Visible = false; |
|
|
|
|
|
|
||
18 |
} |
|
|
|
|
|
|
|
|
|
else |
if |
(user.Login |
== |
textBoxLogin.Text |
&& |
|
||
19 |
user.Password == textBoxPassword.Text && user.Role == |
|
|||||||
|
"Преподаватель") |
|
|
|
|
|
|
||
20 |
{ |
|
|
|
|
|
|
|
|
21 |
this.FormProfessorAccount |
|
|
= |
|
new |
|
||
FormProfessorAccount(this, user); |
|
|
|
|
|||||
22 |
this.FormProfessorAccount.Text |
= |
"Профиль |
" |
+ |
|
|||
|
user.Professor.Name; |
|
|
|
|
|
|
23 |
this.FormProfessorAccount.labelProfessorName.Text |
= |
||||
"Добро пожаловать, " + user.Professor.Name; |
|
|||||
24 |
this.FormProfessorAccount.Visible = true; |
|
||||
25 |
this.Visible = false; |
|
|
|
||
26 |
} |
|
|
|
|
|
|
else |
if |
(user.Login |
== |
textBoxLogin.Text |
&& |
27 |
user.Password == textBoxPassword.Text && user.Role == |
|||||
|
"Администратор") |
|
|
|
||
28 |
{ |
|
|
|
|
|
29 |
this.FormAdminPanel = new FormAdminPanel(this, user); |
|||||
30 |
this.FormAdminPanel.Visible = true; |
|
||||
31 |
this.Visible = false; |
|
|
|
||
32 |
} |
|
|
|
|
|
33 |
} |
|
|
|
|
|
34 |
} |
|
|
|
|
|
35 |
} |
|
|
|
|
|
В представленном методе идет последовательный перебор элементов коллекции UserSet, представляющий собой набор данных элементов из таблицы UserSet в базе данных. Если значение свойства Role элемента из коллекции равно «Студент», логин и пароль совпадают с теми, которые были введены в соответствующие текстовые поля (строка 11), то создается и открывается форма профиля студента FormStudentAccount. Если значение свойства Role элемента из коллекции равно «Преподаватель», логин и пароль совпадают с теми, которые были введены в соответствующие текстовые поля
(строка 19), то создается и открывается форма профиля преподавателя
FormProfessorAccount. Если значение свойства Role элемента из коллекции равно «Администратор», логин и пароль совпадают с теми, которые были введены в соответствующие текстовые поля (строка 27), то создается и открывается форма профиля администратора FormAdminPanel.
Обратите внимание, что при создании объекта одной из трех форм в конструктор передается дополнительно два параметра – ссылка на экземпляр текущего класса (формы авторизации) с помощью ключевого слова this и
ссылка на объект user, для которого осуществляется процесс авторизации,
чтобы использовать данные о пользователе при загрузке информации о нем в его профиле.
§17.17.3 Просмотр списка преподавателей
Рассмотрим, как будет осуществляться просмотр списка преподавателей через профиль студента. Список выводится в listBoxLecturer при нажатии кнопки Просмотр списка преподавателей (buttonShowProfessors). После нажатия на эту кнопку она меняет свою надпись на Просмотр и свое назначение – после этого после выбора из списка преподавателя, если нажать на кнопку Просмотр откроется форма информации о преподавателе (форма
5).
Реализация метода обработчика события нажатия на кнопку Просмотр списка преподавателей/Просмотр представлена в листинге 17.5.
|
|
Листинг 17.5 – Просмотр списка преподавателей |
|
|
|
|
|
1 |
private void buttonShowProfessors_Click(object |
|
Метод обработчик события нажатия на |
sender, EventArgs e) |
|
кнопку buttonShowProfessors |
|
|
|
||
|
|
|
|
2 |
{ |
|
|
|
|
|
|
|
if (buttonShowProfessors.Text == "Просмотр списка |
|
Проверка на равенство надписи кнопки |
3 |
|
buttonShowProfessors значению |
|
преподавателей") |
|
||
|
|
"Просмотр списка преподавателей" |
|
|
|
|
|
|
|
|
|
4 |
{ |
|
Если условие в строке 3 истинно, то |
|
производим следующие действия |
||
|
|
|
|
|
|
|
|
5 |
using (EntityModelContainer db = new |
|
Создание объекта db контекста данных |
EntityModelContainer()) |
|
EntityModelContainer |
|
|
|
||
|
|
|
|
6 |
{ |
|
|
|
|
|
|
|
|
|
Цикл для обработки элементов коллекции |
7 |
foreach (Professor professor in db.ProfessorSet) |
|
db.ProfessorSet (коллекция сущностей |
|
|
|
ProfessorSet из базы данных) |
|
|
|
|
8 |
{ |
|
|
|
|
|
|
9 |
listBoxLecturer.Items.Add(professor.Name); |
|
Добавление в список listBoxLecturer |
|
значений свойства Name каждого |
||
|
|
|
|
|
|
|
|