русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Этап III – Реализация слоя отображения


Дата добавления: 2015-06-12; просмотров: 570; Нарушение авторских прав


Слой отображения в данной лабораторной работе будет реализован с использованием 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,

String user, String passwd)

{

ISession session = null;

//Получение ссылки на текущую сборку

Assembly mappingsAssemly = Assembly.GetExecutingAssembly();

if (factory == null)

{

//Конфигурирование фабрики сессий

factory = Fluently.Configure()

.Database(PostgreSQLConfiguration

.PostgreSQL82.ConnectionString(c => c

.Host(host)

.Port(5432)

.Database(database)

.Username(user)

.Password(passwd)))

.Mappings(m => m.FluentMappings

.AddFromAssembly(mappingsAssemly))

.ExposeConfiguration(BuildSchema)

.BuildSessionFactory();

}

//Открытие сессии

session = factory.OpenSession();

return session;

}

 

//Метод для автоматического создания таблиц в базе данных

private static void BuildSchema(Configuration config)

{

new SchemaExport(config).Create(false, true);

}

 

24. Добавьте обработчик нажатия на кнопку «Подключиться»:

 

private void button1_Click(object sender, EventArgs e)

{

session = openSession(this.textBox1.Text,

Convert.ToInt32(this.textBox2.Text),

this.textBox3.Text, this.textBox4.Text, this.textBox5.Text);

//Скрытие формы

this.Visible = false;

//Передача открытой сессии открытой форме

perent.setSession(session);

//Вывод в таблицу всех групп

perent.fillDataGridView1();

}

 

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. Заполните обработчики нажатия на пункты меню «Подключение к базе», «Отключиться от базы»:

 

private void присоединитьсяКБазеToolStripMenuItem_Click(

object sender, EventArgs e)

{

getForm2().Visible = true;

}

 

private void отключитьсяОтБазыToolStripMenuItem_Click(

object sender, EventArgs e)

{

session.Close();

dataGridView1.Rows.Clear();

dataGridView2.Rows.Clear();

}

 

27. Добавьте методы по заполнению компонентов DataGridView данными о группах и студентах:

 

//Метод по заполнению dataGridView1

public void fillDataGridView1()

{

dataGridView1.Rows.Clear();

//Создание экземпляра фабрики NHibernate

DAOFactory dao = new NHibernateDAOFactory(session);

//Получение dao группы

IGroupDAO groupDAO = dao.getGroupDAO();

//Получение коллекции групп с базы

List<Group> groupList = groupDAO.GetAll();

//Вывод всех групп в таблицу

foreach (Group g in groupList)

{

DataGridViewRow row = new DataGridViewRow();

DataGridViewTextBoxCell cell1 = new DataGridViewTextBoxCell();

DataGridViewTextBoxCell cell2 = new DataGridViewTextBoxCell();

DataGridViewTextBoxCell cell3 = new DataGridViewTextBoxCell();

cell1.ValueType = typeof(string);

cell1.Value = g.GroupName;

cell2.ValueType = typeof(string);

cell2.Value = g.CuratorName;

cell3.ValueType = typeof(string);

cell3.Value = g.HeadmanName;

row.Cells.Add(cell1);

row.Cells.Add(cell2);

row.Cells.Add(cell3);

dataGridView1.Rows.Add(row);

}

}

 

//Вывод всех студентов заданной группы в dataGridView2

public void fillDataGridView2(string key)

{

dataGridView2.Rows.Clear();

//Создание фабрики NHibernate

DAOFactory dao = new NHibernateDAOFactory(session);

//Получение dao группы

IGroupDAO groupDAO = dao.getGroupDAO();

//Получение студентов заданной группы

IList<Student> studentList = groupDAO.getAllStudentOfGroup(key);

foreach (Student s in studentList)

{

DataGridViewRow row = new DataGridViewRow();

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. Добавьте обработчики нажатия кнопок «Добавить» и «Заменить»:

 

//Обработчик на Добавить

private void button1_Click(object sender, EventArgs e)

{

DAOFactory dao = new NHibernateDAOFactory(session);

IGroupDAO groupDAO = dao.getGroupDAO();

Group group = new Group();

group.GroupName = textBox1.Text;

group.HeadmanName = textBox2.Text;

group.CuratorName = textBox3.Text;

groupDAO.SaveOrUpdate(group);

perent.fillDataGridView1();

this.Visible = false;

}

 

//Обработчик на Заменить

private void button2_Click(object sender, EventArgs e)

{

DAOFactory dao = new NHibernateDAOFactory(session);

IGroupDAO groupDAO = dao.getGroupDAO();

Group group = groupDAO.getGroupByName(key);

group.GroupName = textBox1.Text;

group.CuratorName = textBox2.Text;

group.HeadmanName = textBox3.Text;

groupDAO.SaveOrUpdate(group);

this.Visible = false;

perent.fillDataGridView1();

}

 

32. Откройте Form1 в редакторе кода CSharp. Для удобства работы с Form3 добавьте метод:

 

private Form3 getForm3()

{

if (form3 == null)

{

form3 = new Form3();

}

form3.setSession(session);

form3.setPerent(this);

return form3;

}

 

33. Заполните обработчики «Добавить», «Удалить», «Заменить» для контекстного меню группы:

 

//Нажатие на "Добавить" в контекстном меню группы

private void добавитьToolStripMenuItem_Click(object sender, EventArgs e)

{

getForm3().Visible = true;

getForm3().setTextBox1Text("");

getForm3().setTextBox2Text("");

getForm3().setTextBox3Text("");

getForm3().setButton1Visible(true);

getForm3().setButton2Visible(false);

}

 

//Нажатие на "Удалить" в контекстном меню группы

private void удалитьToolStripMenuItem_Click(object sender, EventArgs e)

{

DAOFactory dao = new NHibernateDAOFactory(session);

IGroupDAO groupDAO = dao.getGroupDAO();

int selectedRow = dataGridView1.SelectedCells[0].RowIndex;

string key = (string)dataGridView1.Rows[selectedRow].Cells[0].Value;

DialogResult dr = MessageBox.Show("Удалить студента?", "",

MessageBoxButtons.YesNo);

if (dr == DialogResult.Yes)

{

try

{

groupDAO.delGroupByName(key);

this.fillDataGridView1();

}

catch (Exception)

{

}

}

}

 

//Нажатие на "Заменить" в контекстном меню группы

private void изменитьToolStripMenuItem_Click(object sender, EventArgs e)

{

int selectedRow = dataGridView1.SelectedCells[0].RowIndex;

string key = (string)dataGridView1.Rows[selectedRow].Cells[0].Value;

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;

string key = (string)dataGridView1.Rows[selectedRow].Cells[0].Value;

fillDataGridView2(key);

}

 

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. Создайте обработчики нажатия на кнопки «Добавить» и «Заменить»:

 

//Обработчик нажатия на "Добавить"

private void button1_Click(object sender, EventArgs e)

{

DAOFactory dao = new NHibernateDAOFactory(session);

IGroupDAO groupDAO = dao.getGroupDAO();

Group group = groupDAO.getGroupByName(key1);

Student student = new Student();

student.FirstName = textBox1.Text;

student.LastName = textBox2.Text;

student.Sex = textBox3.Text[0];

student.Year = Int32.Parse(textBox4.Text);

group.StudentList.Add(student);

student.Group = group;

groupDAO.SaveOrUpdate(group);

perent.fillDataGridView2(key1);

this.Visible = false;

}

 

//Обработчик нажатия на "Заменить"

private void button2_Click(object sender, EventArgs e)

{

DAOFactory dao = new NHibernateDAOFactory(session);

IStudentDAO studentDAO = dao.getStudentDAO();

Student student = studentDAO

.getStudentByGroupFirstNameAndLastName(key1, key2, key3);

student.FirstName = textBox1.Text;

student.LastName = textBox2.Text;

student.Sex = textBox3.Text[0];

student.Year = Int32.Parse(textBox4.Text);

studentDAO.SaveOrUpdate(student);

this.Visible = false;

perent.fillDataGridView2(key1);

}

40. Откройте Form1 с помощью редактора CSharp. Для удобства работы с Form4 добавьте метод:

 

private Form4 getForm4()

{

if (form4 == null)

{

form4 = new Form4();

}

form4.setSession(session);

form4.setPerent(this);

return form4;

}

 

41. Заполните обработчики нажатия на «Добавить», «Удалить», «Заменить» контекстного меню студента:

 

//Нажатие на "Добавить" в контекстном меню студента

private void добавитьToolStripMenuItem1_Click(object sender, EventArgs e)

{

int selectedRow = dataGridView1.SelectedCells[0].RowIndex;

string key = (string)dataGridView1.Rows[selectedRow].Cells[0].Value;

getForm4().Visible = true;

getForm4().setButton1Visible(true);

getForm4().setButton2Visible(false);

getForm4().setTextBox1Text("");

getForm4().setTextBox2Text("");

getForm4().setTextBox3Text("");

getForm4().setTextBox4Text("");

getForm4().setKey1(key);

}

 

//Нажатие на "Удалить" в контекстном меню студента

private void удалитьToolStripMenuItem1_Click(object sender, EventArgs e)

{

int selectedRow = dataGridView1.SelectedCells[0].RowIndex;

string key1 = (string)dataGridView1.Rows[selectedRow].Cells[0].Value;

selectedRow = dataGridView2.SelectedCells[0].RowIndex;

string key2 = (string)dataGridView2.Rows[selectedRow].Cells[0].Value;

selectedRow = dataGridView2.SelectedCells[0].RowIndex;

string key3 = (string)dataGridView2.Rows[selectedRow].Cells[1].Value;

DAOFactory dao = new NHibernateDAOFactory(session);

IStudentDAO studentDAO = dao.getStudentDAO();

Student student = studentDAO

.getStudentByGroupFirstNameAndLastName(key1, key2, key3);

student.Group.StudentList.Remove(student);

studentDAO.Delete(student);

fillDataGridView2(key1);

}

 

//Нажатие на "Заменить" в контекстном меню студента

private void изменитьToolStripMenuItem1_Click(object sender, EventArgs e)

{

int selectedRow = dataGridView1.SelectedCells[0].RowIndex;

string key1 = (string)dataGridView1.Rows[selectedRow].Cells[0].Value;

selectedRow = dataGridView2.SelectedCells[0].RowIndex;

string key2 = (string)dataGridView2.Rows[selectedRow].Cells[0].Value;

selectedRow = dataGridView2.SelectedCells[0].RowIndex;

string key3 = (string)dataGridView2.Rows[selectedRow].Cells[1].Value;

DAOFactory dao = new NHibernateDAOFactory(session);

IStudentDAO studentDAO = dao.getStudentDAO();

Student student = studentDAO

.getStudentByGroupFirstNameAndLastName(key1, key2, key3);

getForm4().Visible = true;

getForm4().setTextBox1Text(student.FirstName);

getForm4().setTextBox2Text(student.LastName);

getForm4().setTextBox3Text(student.Sex.ToString());

getForm4().setTextBox4Text(student.Year.ToString());

getForm4().setKey1(key1);

getForm4().setKey2(key2);

getForm4().setKey3(key3);

getForm4().setButton1Visible(false);

getForm4().setButton2Visible(true);

}

 

42. Добавьте обработчик на изменение размеров формы:

 

private void Form1_Resize(object sender, EventArgs e)

{

this.dataGridView1.Columns["Column1"].Width =

(this.dataGridView1.Width / 3) - 1;

this.dataGridView1.Columns["Column2"].Width =

(this.dataGridView1.Width / 3) - 1;

this.dataGridView1.Columns["Column3"].Width =

(this.dataGridView1.Width / 3) - 1;

this.dataGridView2.Columns["Column4"].Width =

System.Convert.ToInt32(this.dataGridView2.Width * 0.3) - 1;

this.dataGridView2.Columns["Column5"].Width =

System.Convert.ToInt32(this.dataGridView2.Width * 0.3) - 1;

this.dataGridView2.Columns["Column6"].Width =

System.Convert.ToInt32(this.dataGridView2.Width * 0.1) - 1;

this.dataGridView2.Columns["Column7"].Width =

System.Convert.ToInt32(this.dataGridView2.Width * 0.3) - 1;

}

 

Результат работы приложения представлен на рисунке 4.4.

Рисунок 4.4 – Результат работы приложения



<== предыдущая лекция | следующая лекция ==>
Этап II – Создание слоя доступа к данным (DAO) | 


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.919 сек.