Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR_6_Tekhnologia_programmirovania.docx
Скачиваний:
51
Добавлен:
20.03.2016
Размер:
91 Кб
Скачать

3.2.7. Удаление записей таблицы 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, задающее режим автоматического внесения изменений в дочернюю таблицу при удалении записей родительской таблицы. Поэтому при удалении строк роди­тельской таблицы происходит удаление соответствующих строк дочерней таблицы.

3.2.8. Удаление номера телефона

Для удаления номера телефона предназначена кнопка Удалить, расположенная возле списка телефонов. Далее приведен обработчик событий для этой кнопки:

private void DelPhoneButton_Click(object sender, EventArgs e)

{

//если выбрана запись для удаления

if (dataGridView2.SelectedRows.Count != 0)

{

If (MessageBox.Show("Вы действительно хотите удалить

запись?", "Подтверждение",

MessageBoxButtons.YesNo) == DialogResult.Yes)

{

try

{

//удалить выбранную строку

dataSet11.Phones.Rows[PhoneId].Delete();

}

catch (Exception)

{

}

//обновить БД и ее содержимое на форме

UpdateContacts();

}

}

else

MessageBox.Show("Выберите строку для удаления",

"Ошибка");

}

Код обработчика идентичен предыдущему (естественно, работа идет с таблицей Phones и компонентом dataGridView2).

3.2.9. Фильтрация данных

В данном приложении приведен пример фильтра, который позволяет просматривать номера телефона одного, выбранного человека. Фамилия этого человека выбирается в выпадающем списке FamComboBox. Режим фильтрации включается флажком FilterCheckBox. Код обработки щелчка по этому флажку приведен ниже:

private void FilterCheckBox_CheckedChanged(object sender, EventArgs e)

{

//если установлен флажок и выбрана фамилия

if (FilterCheckBox.Checked && FamComboBox.Text != "")

{

//получить выбранную фамилию

string fio = FamComboBox.SelectedItem.ToString();

//составить условие для поиска нужного человека

//в таблице Contacts

string str = "Fam='" + fio + "'";

//найти нужного человека в таблице Contacts

DataRow[] contacts = dataSet11.Contacts.Select(str);

//составить условие для фильтра

str = "ContactId=" + contacts[0]["id"];

//применить фильтр

phonesBindingSource.Filter = str;

}

else

//отменить фильтрацию

phonesBindingSource.Filter = "";

}

В начале работы метода проверяется, установил ли пользователь флажок фильтрации и задал ли требуемую фамилию.

Так как фильтрация будет задаваться для таблицы Phones, а поле «фамилия» находится в таблице Contacts, необходимо получить идентификатор (порядковый номер) требуемой фамилии, чтобы потом найти его в таблице телефонов. Получить выбранную фамилию из выпадающего списка можно методом SelectedItem, а отобрать запись с этой фамилией из таблицы Contacts – методом Select().

Далее из полученной записи выделяется значение поля id, на основе которого задается условие для фильтрации: ContactId = <значение поля id>. Сформированный фильтр применяется к компоненту phonesBindingSource с помощью свойства Filter. Этот компонент генерируется автоматически при добавлении адаптеров доступа к базе данных.

Если флажок FilterCheckBox не отмечен или в списке не выбрана фамилия, свойству Filter присваивается значение пустой строки, т.е. фильтрация отменяется.