Обновление информации в базе данных
Элемент управления DataGrid позволяет пользователю корректировать информацию непосредственно в сетке данных. Когда пользователь изменяет данные в DataGrid, автоматически обновляется и набор данных DataSet. Однако эти изменения не вносятся непосредственно в таблицы исходной базы данных (не забывайте, что вы работаете с несвязанной копией фрагмента базы данных).
Когда данные изменились в DataSet, вы должны инициализировать внесение этих изменений в исходную базу данных. Объект DataAdapter может выполнить эти действия через свой метод update, который проверяет каждую запись в DataSet и, если были сделаны изменения, отправляет их в исходную базу данных.
В следующем примере вы добавите кнопку на форму, нажав которую пользователи смогут инициализировать процесс отправки изменении в базу данных.
Для задания кнопки обновления базы данных выполните следующие действия.
1. Из вкладки Windows Forms окна Toolbox, перенесите на форму элемент управления Button.
2. Измените свойство кнопки Text с Button2 на Обновить данные.
3. Двойным щелчком на кнопке создайте заготовку модуля обработки события Click.
4. В нем, вызовите метод Update объекта oleDbDataAdapter1, который внесет изменения в базу данных.
5. Используйте объект MessageBox для вывода информации об успешном завершении операции обновления данных.
Программный код, показанный в листинге 4.3, иллюстрирует вызов этих методов.
Листинг 4.3
‘ Visual Basic
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
|
|
OleDbDataAdapterl.Update(DataSetll)
MessageBox.Show("Данные успешно обновлены!")
End Sub
// C#
private void Button2_Click(object sender, System.EventArgs e)
{
oleDbDataAdapter1.Update(dataSet11) ;
MessageBox.Show("Данные успешно обновлены!") ;
}
Попробуйте запустить приложение, загрузить данные в DataGrid, исправить некоторые записи и внести сделанные изменения в исходную базу данных (рис. 4.20).
Рис. 4.20. Возврат изменений пользователя в базу данных
Доступ к данным в Windows-формах с использованием текстовых полей
Вначале несколько модифицируем форму предыдущего примера:
□ добавим несколько элементов управления TextBox для отображения информации;
□ установим связь этих элементов с уже созданным объектом Dataset;
□ добавим управляющие элементы Button, обеспечивающие навигацию (перемещение) по записям базы данных;
□ добавим элементы Label, отображающие надписи к текстовым полям, а также номер текущей записи.
В текстовые поля будем выводит следующую информацию из таблицы authors базы данных Pubs: имя — au_lname, фамилию — au_fname , город — city и код штата — state.
Для реализации выше описанного выполните следующие действия.
1- Добавьте на форму, созданную в предыдущем разделе, следующие элементы управления: 4 элемента TextBox, 2 элемента Button, 6 элементов Label.
|
|
2- Расположите их на форме, как показано на рис. 4.21.
Рис. 4.21. Расположение добавленных элементов на форме
3. Измените свойства этих элементов в соответствии с табл. 4.1.
Таблица 4.1. | Значения свойств | элементов управления | |
Элемент | Назначение | Свойство Name | Свойство Text |
Label | Надпись "Имя" | Label1 | Имя |
TextBox | Имя (поле аu_lname) | TextBox1 | |
Label | Надпись "Фамилия" | Label2 | Фамилия |
TextBox | Фамилия (поле au_fname) | TextBox2 | |
Label | Надпись"Город" | Label3 | Город |
TextBox | Город (поле city) | TextBox3 | |
Label | Надпись "Код штата" | Label4 | Код штата |
TextBox | Код штата (поле state) | TextBox4 | |
Label | Надпись "Номер записи" | Label5 | Номер записи |
Label | Номер записи | Label6 | № |
Button | Сдвиг на запись вверх | Button3 | Вверх |
Button | Сдвиг на запись вниз | Button4 | Вниз |
После выполненных действий вы получите форму следующего вида (рис. 4.22).
Рис. 4.22. Элементы управления формы после переопределения их свойств
4.4.1. Связывание элементов TextBox с набором данных
Четыре текстовых поля предназначены для отображения информации из одной записи набора данных. Для того чтобы содержимое текстовых полей автоматически обновлялось при смене записи, их необходимо связать с соответствующими колонками набора данных DataSet. Для связывания с данными обычно используется свойство элементов управления TextBox.
|
|
Для связи текстовых полей с DataSet выполните следующие действия.
1. Вернитесь в окно дизайнера формы.
2. Выделите элемент TextBox1 и нажмите кнопку <F4> для перехода в окно свойств этого элемента.
3. Найдите свойство DataBindings и раскройте его (рис. 4.23), щелкнув мышью на значке "+" в его вершине.
Рис. 4.23. Свойство DataBindings текстового поля
4. Из раскрывшегося списка выберите свойство Text, в пустой строке которого нажмите кнопку, после чего появится дополнительное окно со структурой объекта DataSet11.
5. Раскройте содержимое объекта dataSet11 и выберите из таблицы authors то поле, с которым вы хотите связать с элементом формы TextBox1 (в данном случае мы связываем с au_lname). Щелкните мышью на au_lname. В результате этих действий свойству Text будет присвоено значение authors.au_lname объекта dataSet11 (рис. 4.24).
Рис. 4. 24. Связывание текстового поля со столбцом таблицы DataSet
6. Повторите шаги 2, 5 для остальных текстовых полей (TextBox2, TextBox3, TextBox4), связав их с элементами набора данных dataSet11 — authors.au_fname, dataSet11 — authors.city, dataSet11 —authors.state.
|
|
После этих действий уже можно посмотреть результаты своего труда. Запустите приложение и заполните сетку данными, нажав кнопку Загрузить. Если все было сделано правильно, то вы увидите, что в текстовых полях отображается та же информация, что и в DataGrid (рис. 4.25).
Теперь попробуйте скорректировать информацию в текстовом поле, а затем передвинуться на другую строку в DataGrid. Ваша корректировка немедленно будет отражена в сетке данных. Это говорит о том, что действительно между текстовыми полями TextBox и колонками набора данных DataSet установлена связь. Однако ваши исправления не будут зафиксированы в исходной таблице базы данных, пока вы не нажмете кнопку Обновить данные, что подтверждает факт вашей работы в отрыве от исходной таблицы authors базы данных Pubs.
Если данные отображаются в элементе DataGrid, то навигация по записям осуществляется достаточно просто — либо мышью, либо клавишами со стрелками. При отображении данных в текстовых полях на форму необходимо добавлять элементы управления, обеспечивающие переход от одной записи к другой. Мы для этой цели добавили на форму две кнопки Вниз, Вверх.
Рис. 4.25. Отображение данных в элементе DataGrid и текстовых полях
Номер текущей записи, можно получить (или задать) из свойства Position объекта BindingContext. Изменяя значение этого свойства, вы будете перемещать указатель записи на нужную позицию. Для определения количества записей в таблице данных можно обратиться к свойству count объекта BindingContext. Итак, добавим программный код к кнопкам, обеспечивающим навигацию по записям.
Двойным щелчком на кнопке Вверх(Button3) создайте обработчик события Click. Добавьте программный код (листинг 4.4), обеспечивающий переход на предыдущую запись путем уменьшения на 1 свойства Position объекта BindingContext:
Листинг 4.4
' Visual Basic
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System. EventArgs) Handles btnPrevious.Click
Me.BindingContext(DataSetl1, "authors").Position -=1
End Sub
// C#
private void Button3_Click(object sender, System.EventArgs e)
{
this.BindingContext[DataSetl1, "authors"].Position -=1;
}
По аналогии для кнопки Вниз(Button4) добавьте программный код (листинг 4.5), обеспечивающий переход на следующую запись путем увеличения на 1 свойства Position объекта BindingContext.
Листинг 4.5
' Visual Basic
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System. EventArgs) Handles btnPrevious.Click
Me.BindingContext(DataSetll, "authors").Position+=1
End Sub
// C#
private void Button4_Click(object sender, System.EventArgs e)
{
this.BindingContext[DataSetll, "authors"].Position+=1;
}
Запустите приложение и проверьте, что созданные кнопки действительно осуществляют перемещение по записям.
Дата добавления: 2018-02-15; просмотров: 782; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!