- •Лабораторная работа №6. Доступ к данным с помощью технологии ado.Net
- •1. Цель работы
- •2. Сведения из теории
- •2.1. Типы пространства имен System.Data
- •2.5. Возможности класса DataSet
- •2.6. Класс DataRelation
- •3. Пример выполнения работы
- •3.1. Визуальное проектирование диалогового окна
- •3.2. Проектирование программного кода
- •3.2.1. Обновление содержимого главного окна приложения
- •3.2.2. Добавление нового контакта
- •3.2.3. Добавление номера телефона
- •3.2.4. Выбор записей в таблицах
- •3.2.5. Редактирование записей таблицы Contacts
- •3.2.6. Изменение номера телефона
- •3.2.7. Удаление записей таблицы Contacts
- •If (MessageBox.Show("Вы действительно хотите удалить
- •3.2.8. Удаление номера телефона
- •If (MessageBox.Show("Вы действительно хотите удалить
- •3.2.9. Фильтрация данных
- •4. Задание для самостоятельной работы
3.2.4. Выбор записей в таблицах
Если требуется изменить или удалить данные из базы, то для этого необходимо указать запись, с которой будут производиться эти действия. В данном приложении запись выбирается путем выделения соответствующей строки компонента DataGridView. При этом желательно для обеих таблиц на форме установить свойство MultiSelect в false, чтобы запретить выбор более чем одной строки.
Номер выбранной записи будет сохраняться в переменных: RowId для таблицы Contacts и PhoneId для таблицы Phones. Эти переменные следует добавить в класс главной формы либо визуальным способом (как описано в пункте 2.2.1), либо вручную следующим образом:
private int RowId;
private int PhoneId;
Выбор нужной записи осуществляется в обработчике события RowHeaderMouseClick компонентов DataGridView. Это событие происходит, когда пользователь щелкает мышью в столбце заголовка строки, т.е. выделяет запись. Код данного обработчика для таблицы Contacts представлен ниже:
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).