
- •Часть 1.
- •1. Инструментарий среды Visual Studio 2008 по разработке приложений баз данных
- •1.1. Окно Источники данных
- •1.2. Окно Обозреватель баз данных
- •Создание локальной бд с помощью sql Server Compact 3.5 и Visual Studio
- •Общие сведения о локальных данных
- •Добавление в проект базы данных sql Server Compact 3.5
- •Создание новой базы данных sql Server Compact 3.5
- •Добавление существующей базы данных в проект
- •Создание новых таблиц в базе данных
- •Создание столбца с автоматической генерацией значения
- •Создание ограничения ссылочной целостности между таблицами базы данных
- •Заполнение таблиц данными
- •Подключение к данным в приложениях Windows Forms
- •Отображение данных в элементе управления DataGridView в Windows Forms
- •Отображение данных одной таблицы
- •Отображение данных из нескольких связанных таблиц
- •Создание общей таблицы
- •Создание таблицы подстановок
- •Связывание элементов управления Windows Forms с компонентом BindingSource с помощью конструктора
- •Для привязки элемента управления при разработке выполните следующие действия.
- •Переход между строками с помощью элемента управления BindingNavigator
- •Поиск заданной строки в таблице
- •Поиск строки со значением первичного ключа
- •Поиск строк по значениям столбцов
- •Диалоговое окно Построитель условий поиска
- •Агрегирование
- •Вычисляемые поля
- •Модификация строк в наборах данных
- •Добавление строк в наборы данных
- •Получение определенных версий объекта DataRow
- •Редактирование строк в объекте DataTable
- •Удаление строк из объекта DataTable
- •Сохранение данных в источнике данных
- •Чтобы внести изменения в набор данных вызовите метод AcceptChanges в DataSet, DataTable или DataRow:
- •Получение измененных записей
- •Дополнительные сведения по работе с базами данных в Visual Studio
- •Наборы данных в Visual Studio
- •Описание основных компонентов по работе с базами данных
- •Лабораторная работа №3 Создание базы данных «Автотранспорт»
- •Лабораторная работа №4 Агрегированные и вычисляемые поля
- •Лабораторная работа №5 Подстановочные, агрегированные и вычисляемые поля
- •Лабораторная работа №6 Проверочная
- •Лабораторная работа №7 Редактирование
- •Лабораторная работа №8 Поиск и сортировка данных
Получение определенных версий объекта DataRow
При внесении изменений в строки данных набор данных сохраняет исходные (Original) и новые (Current) версии строк в коллекции DataRowVersion.
Разные версии строки существуют только после ее изменения и до вызова метода AcceptChanges для этой строки. После вызова метода AcceptChanges текущая и исходная версии становятся идентичными.
Для получения исходной версии записи DataRow пропишите код, идентичный следующему:
тип переменная;
переменная = БД.Таблица[№ строки]
["поле", DataRowVersion.Original]
где тип переменной должен соответствовать типу поля, а получаемое значение должно быть преобразовано к данному типу, например
string originalFIO;
originalFIO = sotrudnicDataSet1.person[0]
["fio", DataRowVersion.Original].ToString();
Для получения текущей версии записи необходимо получить доступ к значению столбца и добавить параметр к индексу, обозначающему, какую версию строки нужно возвратить:
тип переменная;
переменная = БД.Таблица[№ строки]
["поле", DataRowVersion. Current] .ToString();
где тип переменной должен соответствовать типу поля, а получаемое значение должно быть преобразовано к данному типу.
В следующем примере показано, как можно использовать значение DataRowVersion для получения текущего значения поля fio в DataRow:
string originalFIO;
originalFIO = sotrudnicDataSet1.person[0]
["fio", DataRowVersion.Current].ToString();
Редактирование строк в объекте DataTable
Чтобы обновить существующие записи в наборе данных (индекс строки неизвестен):
Создайте функцию обработки события редактирования данных (кнопка, меню или д.р.).
С помощью метода FindBy присвойте определенной переменной значение найденного DataRow и затем используйте эту переменную для доступа к столбцам, которые требуется изменить и присвоить им новые значения.
Этим действиям соответствует следующий код:
// Вызов метода NewRow для таблицы, в которую необходимо добавить данные, чтобы создать новую пустую строку.
DataRow пер = имя_БД.имя_таблицы.NewRow();
//Поиск записи, в которую необходимо внести изменения
имя_БД.имя_таблицы.Find_ключевое_ поле(значение);
// Внесение изменений
row1["имя_поля "] = textBox3.Text;
row1["имя_поля "] = textBox4.Text;
…………………
//Сохранение данных в таблице
this.Validate();
this.ТаблицаBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.БД);
Примечания.
Если ключ составной, а поиск идет по одному полю, то в качестве поисковой функции используется:
имя_БД.имя_таблицы.Select("поле=значение");
Если ключ составной и поиск ведется по всем полям ключа, то в поисковой функции FindBy прописываются несколько значений через запятую
Внимание. В случае неоднозначного результата поиска, значения будут обновлены в первой найденной записи.
Пример. Необходимо, чтобы в режиме редактирования при переходе с записи на запись в таблице текущая запись появлялась в панели редактирования:
Для этого действия в обработчики щелчка мыши по таблице необходимо прописать код:
private void allDataGridView_Click(object sender, EventArgs e)
{
DataGridViewRow dr = allDataGridView.CurrentRow;
textBox2.Text = dr.Cells[1].Value.ToString();
textBox1.Text = dr.Cells[0].Value.ToString();
textBox4.Text = dr.Cells[3].Value.ToString();
textBox3.Text = dr.Cells[2].Value.ToString();
textBox5.Text = dr.Cells[4].Value.ToString();
textBox6.Text = dr.Cells[5].Value.ToString();
}
Для обновления записи без проверки какие именно поля были обновлены можно прописать код:
private void button1_Click(object sender, EventArgs e)
{
SotrudnicDataSet1.personRow rp = sotrudnicDataSet1.person.FindBypasport(Convert.ToInt32(textBox2.Text));
rp["pol"] = textBox4.Text;
rp["fio"] = textBox1.Text;
rp["data"] = Convert.ToDateTime(textBox3.Text);
SotrudnicDataSet1.workerRow rw = sotrudnicDataSet1.worker.FindBypasportwork(Convert.ToInt32(textBox2.Text), allDataGridView.CurrentRow.Cells[4].Value.ToString());
if (rw["work"] != allDataGridView.CurrentRow.Cells[4].Value.ToString()) rw["work"] = textBox5.Text;
rw["salary"] = Convert.ToInt32(textBox6.Text);
if (MessageBox.Show("Была фамилия: " + sotrudnicDataSet1.person[0]
["fio", DataRowVersion.Original].ToString() + " Новая фамилия: " + sotrudnicDataSet1.person[0]
["fio", DataRowVersion.Current].ToString(), "Внимание", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
this.Validate();
this.personBindingSource.EndEdit();
this.workerBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.sotrudnicDataSet1);
allTableAdapter.Fill(this.sotrudnicDataSet1.All);
};
}