Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{ try { //получить номер выделенной строки RowId = e.RowIndex; //отобразить фамилию и имя выбранного человека //в текстовых полях FamTextBox.Text = dataSet11.Contacts.Rows[RowId]["Fam"].ToString(); NameTextBox.Text = dataSet11.Contacts.Rows[RowId]["Name"].ToString(); } catch (Exception) { } }
Когда пользователь выбирает строку в таблице, этот обработчик вначале определяет индекс строки, которая стала выделенной в результате выполнения этой операции, и записывает его в переменную RowId. Здесь параметр e обработчика содержит параметры, описывающие характеристики нажатия мышью заголовка строки, в том числе и номер строки (свойство RowIndex). После получения номера выбранной строки выполняется копирование полей фамилии и имени человека из таблицы в соответствующие текстовые поля. Код аналогичного обработчика для таблицы Phones выглядит следующим образом:
Private void dataGridView2_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { try { //получить номер выделенной строки PhoneId = e.RowIndex; //найти запись с полученным номером в DataSet DataRow p = dataSet11.Phones.Rows[PhoneId]; //отобразить номер телефона найденной записи в текстовом поле PhoneTextBox.Text = p["Phone"].ToString(); //получить записи из таблицы Contacts, связанные с данной DataRow[] fams = p.GetParentRows( dataSet11.Relations["FK_Contacts_Phones"]); //выбрать фамилию человека (из текущей записи) в списке FamComboBox.SelectedItem = fams[0]["Fam"].ToString(); } catch (Exception) { } }
Начало обработчика сходно с описанием предыдущего метода: получение номера выделенной строки в переменную PhoneId и копирование номера телефона найденной записи в текстовое поле. Но в данном случае необходимо также отобразить (сделать выбранным) в компоненте ComboBox, фамилию человека, к которому относится этот номер телефона. Т.к. фамилии находятся в таблице Contacts, то нужно получить список записей, связанных с выбранной через отношение FK_Contacts_Phones (см. предыдущую лабораторную работу). Делается это с помощью метода GetParentRows(). Далее из полученных «родительских» записей извлекается поле фамилии (“Fam”), и данная фамилия становится выбранной в выпадающем списке (свойство SelectedItem).
Редактирование записей таблицы Contacts Для того чтобы отредактировать имя или фамилию человека, нужно выделить требуемую строку в таблице DataGridView1, содержащей записи таблицы Contacts. После этого только что рассмотренный обработчик события RowHeaderMouseClick запишет имя и фамилию в текстовые поля редактирования Имяи Фамилиясоответственно. Отредактировав имя или фамилию, пользователь должен щелкнуть кнопку Изменить.Ниже приведен исходный текст обработчика событий для этой кнопки, изменяющего содержимое ячеек соответствующей строки в таблице Contacts.
Private void EditButton_Click(object sender, EventArgs e) { //если выбрана строка в таблице if (dataGridView1.SelectedRows.Count != 0) { //получить содержимое выбранной строки DataRow row = dataSet11.Contacts.Rows[RowId]; //изменить фамилию и имя на введенные значения row["Fam"] = FamTextBox.Text; row["Name"] = NameTextBox.Text; //сохранить изменения и обновить содержимое формы UpdateContacts(); } else MessageBox.Show("Выберите строку для редактирования", "Ошибка"); }
Здесь проверяется, выбрана ли строка для редактирования. Если нет, то выдается сообщение об ошибке и обработчик завершает работу. Иначе надо получть содержимое выбранной строки в объект типа DataRow. Далее значения полей Fam и Name этой строки заменяются на новые, введенные пользователем в текстовых полях, и вызывается метод UpdateContacts() для сохранения изменений в БД и обновления таблиц на форме. Т.к. таблицы БД связаны между собой, и при связывании было указано каскадное изменение и удаление записей, то после сохранения изменений в БД эти изменения отобразятся и в таблице Phones.
Изменение номера телефона Для изменения номера телефона используется кнопка Изменить,расположенная справа от списка телефонов. Исходный текст обработчика событий для этой кнопки представлен ниже:
Private void EditPhoneButton_Click(object sender, EventArgs e) { //если выбрана запись для редактирования if (dataGridView2.SelectedRows.Count != 0) { try { //получить содержимое выбранной строки DataRow row = dataSet11.Phones.Rows[PhoneId]; //изменить номер телефона на введенное значение row["Phone"] = PhoneTextBox.Text; //получить из выпадающего списка фамилию, //для которой добавляется телефон string fio = FamComboBox.SelectedItem.ToString(); //составить условие для поиска этого человека //в таблице Contacts string str = "Fam='" + fio + "'"; //получить id этого человека в таблице Contacts DataRow[] contacts = dataSet11.Contacts.Select(str); //заполнить столбец "ContactId" редактируемой записи row["ContactId"] = contacts[0]["id"]; } catch (Exception) { } //сохранить изменения и обновить содержимое формы UpdateContacts(); } else MessageBox.Show("Выберите строку для редактирования", "Ошибка"); }
Начало обработчика идентично предыдущему: если выбрана строка для редактирования, то получить ее содержимое и изменение значение номера телефона. Далее, если нужно изменить и человека, к которому этот номер телефона относится, то используется технология, описанная в пункте 2.2.3: поиск человека в таблице Contacts с помощью метода Select(), получение его порядкового номера (id) и заполнение этим значением поля ContactId таблицы Phones.
Удаление записей таблицы Contacts Для того чтобы удалить строку, выделенную пользователем в списке контактов, нужно воспользоваться кнопкой Удалить. Ниже приведен исходный текст метода, выполняющего обработку событий от этой кнопки:
Private void DelContactButton_Click(object sender, EventArgs e) { //если выбрана запись для удаления if (dataGridView1.SelectedRows.Count != 0) { if (MessageBox.Show("Вы действительно хотите удалить запись?", "Подтверждение", MessageBoxButtons.YesNo) == DialogResult.Yes) { try { //удалить выбранную строку dataSet11.Contacts.Rows[RowId].Delete(); } catch (Exception) { } //обновить БД и ее содержимое на форме UpdateContacts(); } } else MessageBox.Show("Выберите строку для удаления", "Ошибка"); }
После проверки, выбрана ли в таблице строка для удаления и вывода подтверждающего сообщения, непосредственное удаление записи выполняется методом Delete(), после чего изменения сохраняются в базу данных и отображаются на форме. При связывании таблиц Contacts и Phones в списке Delete ruleбыло выбранозначение Cascade,задающее режим автоматического внесения изменений в дочернюю таблицу при удалении записей родительской таблицы. Поэтому при удалении строк родительской таблицы происходит удаление соответствующих строк дочерней таблицы.
Удаление номера телефона Для удаления номера телефона предназначена кнопка Удалить,расположенная возле списка телефонов. Далее приведен обработчик событий для этой кнопки:
|
||
Последнее изменение этой страницы: 2018-06-01; просмотров: 182. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |