private void AddPhoneButton_Click(object sender, EventArgs e)
private void AddPhoneButton_Click(object sender, EventArgs e) { //если поле ввода телефона не пустое //и выбрана какая-либо фамилия if (PhoneTextBox. Text! = " " & & FamComboBox. Text! = " " ) { try { //создать новую запись таблицы Phones DataRow row = dataSet1. Phones. NewRow(); //заполнить столбец " номер телефона" row[" Phone" ] = PhoneTextBox. Text; //получить из выпадающего списка фамилию, //для которой добавляется телефон string fio = FamComboBox. SelectedItem. ToString(); //составить условие для поиска этого человека //в таблице Contacts string str = " Fam='" + fio + " '"; //получить id этого человека в таблице Contacts DataRow[] contacts = dataSet1. Contacts. Select(str); //заполнить столбец " ContactId" добавляемой записи row[" ContactId" ] = contacts[0][" id" ]; //добавить запись в таблицу dataSet1. Phones. Rows. Add(row); //обновить форму UpdateContacts(); } catch (Exception) { } } }
Здесь вначале проверяется, что поле нового телефона PhoneTextBox не пустое и в выпадающем списке выбран человек, для которого будет добавляться телефон. Если это так, то путем вызова метода NewRow() в таблице Phones создается новая строка как объект класса DataRow. Номер добавляемого телефона сохраняется в столбце Phone. Что же касается столбца ContactId, то в него нужно записать идентификатор строки таблицы Contacts (грубо говоря, порядковый номер человека, которому добавляется телефон). Для этого прежде всего нужно получить фамилию человека из списка FamComboBox с помощью свойства SelectedItem, затем найти этого человека по фамилии в таблице Contacts и получить его id. Поиск данных в таблице осуществляется с помощью метода Select(), где в качестве параметра выступает условие отбора данных. Это условие записывается в строку str и имеет вид: Fam = ‘< фамилия человека> ’. Столбец ContactId новой записи заполняется найденным значением.
Заполненная строка добавляется в таблицу Phones методом Add(). И, наконец, после добавления строки обработчик событий обновляет содержимое базы данных в окне программы методом UpdateContacts().
5. 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 = dataSet1. Contacts. Rows[RowId][" Fam" ]. ToString(); NameTextBox. Text = dataSet1. 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 = dataSet1. Phones. Rows[PhoneId]; //отобразить номер телефона этой записи в текстовом поле PhoneTextBox. Text = p[" Phone" ]. ToString(); //получить связанные записи из таблицы Contacts DataRow[] fams = p. GetParentRows(dataSet1. Relations [" FK_Contacts_Phones" ]); //выбрать фамилию человека (из текущей записи) в списке FamComboBox. SelectedItem = fams[0][" Fam" ]. ToString(); } catch (Exception) { } }
Начало обработчика сходно с описанием предыдущего метода: получение номера выделенной строки в переменную PhoneId и копирование номера телефона найденной записи в текстовое поле. Но в данном случае необходимо также отобразить (сделать выбранным) в компоненте ComboBox, фамилию человека, к которому относится этот номер телефона. Т. к. фамилии находятся в таблице Contacts, то нужно получить список записей, связанных с выбранной через отношение FK_Contacts_Phones (см. предыдущее задание на контрольную работу). Делается это с помощью метода GetParentRows(). Далее из полученных «родительских» записей извлекается поле фамилии (“Fam” ), и данная фамилия становится выбранной в выпадающем списке (свойство SelectedItem ).
5. 2. 5 Редактирование записей таблицы Contacts Для того чтобы отредактировать имя или фамилию человека, нужно выделить требуемую строку в таблице DataGridView1, содержащей записи таблицы Contacts. После этого только что рассмотренный обработчик события RowHeaderMouseClick запишет имя и фамилию в текстовые поля редактирования Имя и Фамилия соответственно.
Отредактировав имя или фамилию, пользователь должен щелкнуть кнопку Изменить. Ниже приведен исходный текст обработчика событий для этой кнопки, изменяющего содержимое ячеек соответствующей строки в таблице Contacts.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|