Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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 не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...