- •Лабораторная работа №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.5. Редактирование записей таблицы 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.
3.2.6. Изменение номера телефона
Для изменения номера телефона используется кнопка Изменить, расположенная справа от списка телефонов. Исходный текст обработчика событий для этой кнопки представлен ниже:
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.