Добавил:
Преподаватель Колледжа информационных технологий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции / Глава 17.3 Entity Framework

.pdf
Скачиваний:
48
Добавлен:
08.05.2022
Размер:
1.5 Mб
Скачать

2

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 каждого