Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR_6_Tekhnologia_programmirovania.docx
Скачиваний:
45
Добавлен:
20.03.2016
Размер:
91.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).