Просмотр данных средствами ADO.NET с привязкой на этапе выполнения
Выборка данных из базы данных SQL Server с применением объекта DataTable
Здесь мы применим вместо элемента управления OleDbDataAdapter соответствующий ему класс System.Data.OleDb.OleDbDataAdapter. Программно будет создан адаптер данных путем присвоения ему строки SQL и объекта соединения. После этого будет заполняться объект DataTable. После этого необходимо будет присвоить значения следующим элементам списка для отображения в нем данных:
- DataSource - указывает на источник с загруженными данными.
- DisplayMember - указывает столбец в таблице, предназначенный для отображения в списке.
- ValueMember - указывает столбец таблицы, который будет загружен в качестве неотображаемых значений списка.
Применение в программе элемента управления ListBox в рамках рассматриваемого способа позволит обращаться к столбцу ValueMember в свойстве SelectItem списка.
- Создайте в проекте копию формы Form1. Для этого в панели Solution Explorer щелкните на файле Form1.cs и через контекстное меню выполните команду Copy, а затем щелкнув на узле проекта DataView выполните команду Paste. Переименуйте копию в Form2.cs
- Щелкните на файле Form2.cs правой кнопкой мыши и выполните команду View Code, чтобы открыть код формы. Через окно поиска и замены текстового редактора (вызов по комбинации клавиш Ctrl-F) найдите в тексте кода все вхождения Form1 и замените их на Form2.
- Найдите в классе Form2 обработчик кнопки, перешедший сюда при копировании предыдущей формы, и замените его тело на следующий код
private void btnLoadList_Click(object sender, System.EventArgs e) { // Описания локальных ссылочных переменных System.Data.OleDb.OleDbDataAdapter odaCust;// Пока только ссылка System.String strSQL; System.Data.DataTable dtCust = new DataTable();// Создали сразу объект // Сформировать строку SQL strSQL = "SELECT CustomerID, CompanyName FROM Customers " + "WHERE CustomerID LIKE '" + this.txtCustLimit.Text + "%'"; // Выполнение в защищенном режиме с перехватом исключений try { // Создать экземпляр адаптера данных odaCust = new System.Data.OleDb.OleDbDataAdapter( strSQL, Form1.BuildCnnStr("localhost", "Northwind")); // Заполнить таблицу данных odaCust.Fill(dtCust); // Связать данные со списком lstCustomers.DataSource = dtCust; lstCustomers.DisplayMember = "CompanyName"; lstCustomers.ValueMember = "CustomerID"; } catch(System.Data.OleDb.OleDbException oextData) { MessageBox.Show(oextData.Message); } }Листинг 8.5. Обработчик кнопки формы Form2
Обратите внимание, что мы в этом коде вызываем BuildCnnStr() как функцию-член класса Form1, которая в нем для этой возможности была объявлена как статическая.
- Разместите на Form0 еще одну кнопку и текстовую метку Label для вызова формы Form2. Содержимое свойства Text текстовой метки может быть таким:
Выборка данных с использованием объекта DataTable
Дизайн формы Form0 должен выглядеть примерно так
- Создайте в форме Form0 обработчик для новой кнопки, который заполните так
private void button2_Click(object sender, System.EventArgs e) { Form2 frm = new Form2(); frm.Show(); }Листинг 8.6. Обработчик для вызова формы Form2