Подключение к базе данных Microsoft Access
Подключение к базе данных Microsoft Access
Связывание элементов управления с данными
Представление данных в виде таблицы на форме достаточно удобно в ряде случаев: можно сразу просматривать большое количество записей. Однако для постоянного внесения изменений в базу данных более удобным будет индивидуальное представление записей, когда значение каждого поля находится в отдельном текстовом поле. Проект DataWizardMDB, рассмотренный в первой главе, представляет собой подобную форму.
Создайте новое Windows-приложение. Назовите его "DataTextBox". Переходим на вкладку Data панели инструментов Toolbox и перетаскиваем oleDbDataAdapter. В запустившемся мастере устанавливаем подключение к файлу Microsoft Access "BDTur_firm.mdb" и выбираем все поля таблицы "Туристы". В свойствах oleDbDataAdapter1 на информационной панели нажимаем "Generate Dataset". Называем его "dsTourists". Переходим в код формы, подключаем пространство имен:
using System.Data.OleDb;
В конструкторе формы после InitializeComponent вызываем метод Fill объекта oleDbDataAdapter:
oleDbDataAdapter1.Fill(dsTourists1);
Переключаемся в режим дизайна. Располагаем на форме Label и TextBox. В свойстве Text элемента label вводим "Фамилия", в этом же свойстве элемента textBox оставляем пустую строку. Свойству Size формы устанавливаем значение 300; 100.
Щелкаем на знак (+) свойства DataBindings элемента управления textBox. В значении поля Text этой группы снова щелкаем на знак (+) около элемента dsProvider и выбираем поле "Фамилия" (рис. 3.1):
Запускаем приложение. Теперь в текстовое поле выводится первое значение столбца "Фамилия" (рис. 3.2):
В программном обеспечении к курсу вы найдете приложение DataTextBox (Code\Glava2\ DataTextBox).
Теперь рассмотрим связывание элементов управления с данными, осуществляемое программным образом. Создайте новое Windows-приложение. Назовите его "DataBindings". На создавшейся форме располагаем по четыре элемента TextBox и Label (рис. 3.3):
Текстовым полям, расположенным напротив надписей, устанавливаем свойство Name следующим образом:
Код туриста - txtID Фамилия - txtLastName Имя - txtFirstName Отчество - txtMiddleName.
Далее подключаем пространство имен:
using System.Data.OleDb;
Задаем строки подключения:
string сommandText = "SELECT Имя, [Код туриста], Отчество, Фамилия FROM Туристы"; string connectionString = @"Provider=""Microsoft.Jet.OLEDB.4.0" ";Data Source=""D:\Uchebnik\Code\Glava1\BDTur_firm.mdb" ";User ID=Admin;Jet OLEDB:Encrypt Database=False";
Устанавливаем соединение и определяем все необходимые объекты в конструкторе формы:
OleDbConnection conn = new OleDbConnection(connectionString); conn.Open(); OleDbCommand myCommand = new OleDbCommand(); myCommand.Connection = conn; myCommand.CommandText = commandText; OleDbDataAdapter dataAdapter = new OleDbDataAdapter(); dataAdapter.SelectCommand = myCommand; DataSet ds = new DataSet(); dataAdapter.TableMappings.Add("Table", "Туристы"); dataAdapter.Fill(ds);
Для связывания свойства Text текстового поля txtID с полем "Код туриста" таблицы "Туристы" используем код
txtID.DataBindings.Add("Text", ds, "Туристы.Код туриста");
Аналогично для других текстовых полей:
txtFirstName.DataBindings.Add("Text", ds, "Туристы.Имя"); txtLastName.DataBindings.Add("Text", ds, "Туристы.Фамилия"); txtMiddleName.DataBindings.Add("Text", ds, "Туристы.Отчество");
Обратите внимание на названия соответствующих столбцов. На практике вы никогда не встретите названий столбцов таблицы базы данных, содержащих пробелы между слов, и к тому же на кириллице - это нонсенс. В нашем учебном проекте тем не менее все работает. Почему? Дело в том, что среда Visual Studio .NET поддерживает кодировку Unicode, поэтому теоретически названия переменных и объектов можно давать на русском языке. Вы можете убедиться в этом, переименовав, скажем переменную "connectionString" в "строкаПодключения" а "ds" в "ДатаСет" и запустить приложение - все будет работать. Но если мы будем создавать коммерческое приложение, которое должно будет работать в самых разных условиях, подобный код сам по себе может стать источником многочисленных ошибок. Поэтому давать названия на кириллице не следует. Для ясности изложения, однако, оставим названия столбцов как есть.
Закрываем соединение:
conn.Close();
Запускаем приложение. В текстовых полях выводится соответствующая информация.
Перемещение по записям. Объект CurrencyManager
Продолжим работу над проектом DataBindings. При выводе данных в виде отдельных записей необходимо реализовать возможность перемещения по записям. Это можно сделать с помощью экземпляра класса CurrencyManager. Располагаем на форме четыре кнопки и надпись в ряд следующим образом (рис. 3.4):
Устанавливаем следующие свойства элементов управления:
Элемент Name | Text | |
---|---|---|
Кнопка | btnFirst | << |
Кнопка | btnPrevious | < |
Кнопка | btnNext | > |
Кнопка | btnLast | >> |
Надпись | lblRecordsPosition |
Объявляем экземпляр cmRecords класса CurrencyManager в классе формы:
CurrencyManager cmRecords;
В конструкторе формы Form1 связываем созданный объект cmRecords с таблицей "Туристы" объекта ds:
cmRecords = (CurrencyManager)BindingContext[ds, "Туристы"];
Создаем обработчиков для событий ItemChanged и PositionChanged объекта cmRecords:
cmRecords.ItemChanged+=new ItemChangedEventHandler(cmRecords_ItemChanged); cmRecords.PositionChanged+=new EventHandler(cmRecords_PositionChanged);
Вызываем метод, отображающий навигацию по записям:
DisplayRecordsPosition ();
Создаем этот метод:
private void DisplayRecordsPosition() { lblRecordsPosition.Text = "Запись " + (cmRecords.Position + 1) + " из " + cmRecords.Count; }
Добавляем методы, вызывающие метод DisplayRecordsPosition() в случае наступления событий ItemChanged и PositionChanged:
private void cmRecords_ItemChanged( object sender, ItemChangedEventArgs e) { DisplayRecordsPosition(); } private void cmRecords_PositionChanged( object sender, System.EventArgs e) { DisplayRecordsPosition(); }
Добавляем обработчиков для нажатий навигационных кнопок:
private void btnFirst_Click(object sender, System.EventArgs e) { cmRecords.Position = 0; } private void btnPrevious_Click(object sender, System.EventArgs e) { cmRecords.Position--; } private void btnNext_Click(object sender, System.EventArgs e) { cmRecords.Position++; } private void btnLast_Click(object sender, System.EventArgs e) { cmRecords.Position = cmRecords.Count - 1; }
Запускаем приложение. Теперь можно перемещаться по записям (рис. 3.5):
В программном обеспечении к курсу вы найдете приложение DataBindings (Code\Glava2\DataBindings).