Слой отображения в данной лабораторной работе будет реализован с использованием Windows Forms (толстый клиент). В следующей лабораторной работе слой отображения будет реализован с использованием технологии ASP.NET как тонкий клиент.
13. Создайте три дополнительные формы. Одна будет использоваться для ввода настроек подключения, вторая - для добавления и изменения группы, третья – для добавления и изменения студента.
14. На главной форме разметите компонент MenuStrip, добавьте к нему пункт меню «Источник данных», а к пункту «Источник данных» пункты «Подключение к базе» и «Отключение от базы», создайте обработчики нажатия на эти два пункта меню.
15. Установите на форму компонент SplitConteiner для того, чтобы разделить рабочую область формы на две части.
16. Установите с левую и правую части компонент GoupBox. Установите у левого GoupBox свойство Text в значение «Группы», а у правого свойство Text в значение – «Студенты», установите у обоих GoupBox свойство Dock в значение Fill.
17. Разместите на левом и на правом GoupBox компоненты DataGridView. Установите у них свойство Dock в значение Fill. Левый DataGridView будет использоваться для отображения списка групп, а правый для отображения списка студентов в группе. Настройте каждый из DataGridView следующим образом: ReadOnly – True, MultiSelect – False, RowHeadersVisible – False, SelectionMode – FullRowSelect, AllowUserToAddRows - False.
18. Добавьте в первый DataGridView колонки «Название группы», «ФИО куратора», «ФИО старосты», а во второй добавьте колонки «Имя», «Фамилия», «Пол», «Год рождения». Добавить колонки можно с помощью свойства Columns. В конструкторе колонок необходимо внимательно следить за свойством Name колонки, через которое потом происходит обращение к колонке из программы.
19. Добавьте два компонента ContextMenuStrip, свяжите одно контекстное меню с левым DataGridView, а другое с правым DataGridView через свойство ContextMenuStrip. Добавьте в каждом меню три пункта «Добавить», «Удалить», «Заменить», к каждому пункту меню добавьте обработчик на нажатие.
20. Теперь необходимо реализовать функцию подключения приложения к базе данных. Связывать приложение с базой данных будет сессия NHibernate. Разместите на второй форме (Form2) пять компонентов TextBox, каждый TextBox можно подписать с использованием компонента Label. Первый TextBox будет использоваться для ввода имени хоста, второй – для ввода порта, третий – для ввода имени базы данных, четвертый – для ввода имени пользователя, а пятый – для ввода пароля. На форме также следует поместить кнопку и назвать ее, например, «Подключиться».
Конечный результат проектирования формы подключения к базе представлен на рисунке 4.1.
Рисунок 4.1 – Форма подключения к базе
21. Каждая форма должна иметь доступ к родительской форме (Form1), а также к сессии (ISession). Откройте форму Form2 с использованием редактора CSharp. Добавьте над конструктором формы поля:
private ISessionFactory factory;
//Ссылка на сессию
private ISession session;
//Ссылка на родительскую форму
private Form1 perent;
22. Добавьте метод по установке поля perent:
public void setPerent(Form1 perent)
{
this.perent = perent;
}
23. Добавьте методы по открытию сессии:
//Метод открытия сессии
private ISession openSession(String host, int port, String database,
25. Теперь необходимо добавить функции по подключению и отключении приложения от базы данных. Откройте Form1 в режиме редактора CSharp. Добавьте над конструктором формы поля:
private ISession session;
private Form2 form2 = null;
private Form3 form3 = null;
private Form4 form4 = null;
Поля form3, и form4 понадобятся для форм добавления и редактирования групп и студентов.
Также необходимо добавить метод setSession(), чтобы установки соединения могла передасть сессию главной форме:
public void setSession(ISession session)
{
this.session = session;
}
Для удобства обращения к форме добавьте метод по созданию и инициализации формы:
private Form2 getForm2()
{
if (form2 == null)
{
form2 = new Form2();
}
form2.setPerent(this);
return form2;
}
26. Заполните обработчики нажатия на пункты меню «Подключение к базе», «Отключиться от базы»:
DataGridViewTextBoxCell cell1 = new DataGridViewTextBoxCell();
DataGridViewTextBoxCell cell2 = new DataGridViewTextBoxCell();
DataGridViewTextBoxCell cell3 = new DataGridViewTextBoxCell();
DataGridViewTextBoxCell cell4 = new DataGridViewTextBoxCell();
cell1.ValueType = typeof(string);
cell1.Value = s.FirstName;
System.Console.WriteLine(s.FirstName + "\n");
cell2.ValueType = typeof(string);
cell2.Value = s.LastName;
cell3.ValueType = typeof(string);
cell3.Value = s.Sex;
cell4.ValueType = typeof(string);
cell4.Value = s.Year;
row.Cells.Add(cell1);
row.Cells.Add(cell2);
row.Cells.Add(cell3);
row.Cells.Add(cell4);
dataGridView2.Rows.Add(row);
}
}
28. Приступим к реализации функций добавления, удаления и замены группы. Откройте Form3 в режиме конструктора, добавьте три компонента TextBox (поле ввода). Первое поле ввода будет использоваться для ввода названия группы, второе – для ввода ФИО куратора, третье – для ввода ФИО старосты. Поля ввода можно подписать компонентом Label. Добавьте две кнопки: «Добавить» и «Заменить». Результат проектирования формы группы представлен на рисунке 4.2.
Рисунок 4.2 – Форма добавления и замены группы
29. Откройте Form3 в режиме конструктора CSharp. Добавьте над конструктором класса поля:
private ISession session;
private Form1 perent;
private string key;
Первое поле хранит в себе ссылку на сессию, второе поле – ссылку на главную форму, а третье – ключ, который нам необходим будет при замене группы. Для установки значений этих полей добавьте методы:
public void setPerent(Form1 perent)
{
this.perent = perent;
}
public void setSession(ISession session)
{
this.session = session;
}
public void setKey(string key)
{
this.key = key;
}
30. Для того чтобы получить доступ к полям ввода и кнопкам с главной формы добавьте следующие set-методы:
public void setTextBox1Text(string text)
{
this.textBox1.Text = text;
}
public void setTextBox2Text(string text)
{
this.textBox2.Text = text;
}
public void setTextBox3Text(string text)
{
this.textBox3.Text = text;
}
public void setButton1Visible(bool visible)
{
this.button1.Visible = visible;
}
public void setButton2Visible(bool visible)
{
this.button2.Visible = visible;
}
31. Добавьте обработчики нажатия кнопок «Добавить» и «Заменить»:
DAOFactory dao = new NHibernateDAOFactory(session);
IGroupDAO groupDAO = dao.getGroupDAO();
Group group = groupDAO.getGroupByName(key);
getForm3().Visible = true;
getForm3().setKey(key);
getForm3().setTextBox1Text(group.GroupName);
getForm3().setTextBox2Text(group.CuratorName);
getForm3().setTextBox3Text(group.HeadmanName);
getForm3().setButton1Visible(false);
getForm3().setButton2Visible(true);
}
34. Для того чтобы при нажатии на строчку DataGridView для группы в DataGridView для студентов отображался список студентов выделенной группы, добавьте обработчик нажатия на строчку DataGridView:
//Обработчик нажатия на строчку DataGridView группы
private void dataGridView1_CellClick(
object sender, DataGridViewCellEventArgs e)
{
int selectedRow = dataGridView1.SelectedCells[0].RowIndex;
35. Приступим к реализации функций добавления, удаления и замены студента. Откройте Form4 в режиме конструктора. Добавьте 4 компонента TextBox (поля ввода). Первое поле будет использоваться для ввода имени студента, второе – для ввода фамилии студента, третье – для ввода пола студента, четвертое – для ввода года рождения студента. Каждое поле ввода целесообразно подписать с использованием компонента Label. Добавьте на форму кнопки «Добавить» и «Заменить». Результат проектирования формы студента представлен на рисунке 4.3
Рисунок 4.3 – Форма добавления и замены студента
36. Откройте Form4 в режиме редактора CSharp. Добавьте над конструктором класса формы поля:
private ISession session;
private Form1 perent;
private string key1;
private string key2;
private string key3;
Поле key1 содержит название группы, поле key2 содержит имя студента, поле key3 содержит фамилию студента.
37. Добавьте set-методы по установке вышеописанных переменных:
public void setSession(ISession session)
{
this.session = session;
}
public void setPerent(Form1 perent)
{
this.perent = perent;
}
public void setKey1(string key1)
{
this.key1 = key1;
}
public void setKey2(string key2)
{
this.key2 = key2;
}
public void setKey3(string key3)
{
this.key3 = key3;
}
38. Для доступа к полям ввода и кнопкам формы добавьте следующие set-методы:
public void setTextBox1Text(string text)
{
this.textBox1.Text = text;
}
public void setTextBox2Text(string text)
{
this.textBox2.Text = text;
}
public void setTextBox3Text(string text)
{
this.textBox3.Text = text;
}
public void setTextBox4Text(string text)
{
this.textBox4.Text = text;
}
public void setButton1Visible(bool visible)
{
this.button1.Visible = visible;
}
public void setButton2Visible(bool visible)
{
this.button2.Visible = visible;
}
39. Создайте обработчики нажатия на кнопки «Добавить» и «Заменить»: