Опубликован: 13.07.2010 | Доступ: свободный | Студентов: 891 / 20 | Оценка: 4.40 / 4.20 | Длительность: 77:34:00
Самостоятельная работа 8:

Просмотр данных средствами ADO.NET с привязкой на этапе выполнения

Выборка данных из базы данных SQL Server с применением объекта DataTable

Здесь мы применим вместо элемента управления OleDbDataAdapter соответствующий ему класс System.Data.OleDb.OleDbDataAdapter. Программно будет создан адаптер данных путем присвоения ему строки SQL и объекта соединения. После этого будет заполняться объект DataTable. После этого необходимо будет присвоить значения следующим элементам списка для отображения в нем данных:

  1. DataSource - указывает на источник с загруженными данными.
  2. DisplayMember - указывает столбец в таблице, предназначенный для отображения в списке.
  3. 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
  • Постройте приложение и убедитесь, что из формы Form0 по щелчку на второй кнопке вызывается форма Form2, наделенная функциональностью отображать выборку данных из базы, но через объект DataTable. Снимок экрана будет примерно таким-же, что и в Form2.