Автозаполнение из базы данных

      В данной инструкции будет рассмотрено создание автоматического завершения текста в компонентах TextBox и ComBox с использованием в качестве источника данных, бд Access 2003. В данных компонентах для организации автозаполнения присутствует три свойства:
  • AutoCompleteSource - задает значение, указывающее источник полных строк, используемых для автоматического завершения;
  • AutoCompleteMode - задает параметр, отслеживающий как должно выполняться автоматическое завершение работы;
  • AutoCompleteCustomSource - задает источник данных автозаполнения.
      В Microsoft Net Framework присутствует класс AutoCompleteStringCollection, который содержит коллекцию строк, используемых функцией автозаполнения для некоторых элементов управления Windows Forms. Именно данный класс будет заполняться из базы данных и устанавливаться в компонентах как источник автоматического завершения текста.
      На сайте уже присутствует инструкция по работе с данной функцией, вы можете ознакомиться с ней по следующему веб адресу Автозаполнение TextBox.
      Откройте Microsoft Access и перейдите в параметры приложения. В левой части открывшегося окна у вал будет список разделов параметров вашего приложения, по умолчанию будет выбран «Общие». В правой части будет представлено три группы параметров, найдите группу «Создание баз данных». Первым параметром данной группы будет формат файла по умолчанию, для пустой базы данных. Выберете из выпадающего списка «Access 2002-2003». Установка данного параметра позволит автоматически создавать базы данных в формате «*.mdb», что позволит открывать их даже в старых версиях Microsoft Office. Данные действия необходимы при создании базы данных в Microsoft Office выше версии 2003. Нажмите «Ок»
      Перейдите в меню «Файл» и выберете пункт «Создать». В центральной части окна выберете «Новая база данных», а правой задайте имя файла бд и нажмите на кнопку «Создать».
      По умолчанию у вас откроется вкладка с автоматически созданной таблицей «Таблица1», а в левой части будут представлены все объекты Access. Сделайте клик правой клавишей мыши по объекту «Таблица1» и выберете из появившегося контекстного меню, пункт «Конструктор».
      Конструктор таблиц является графическим средством представления и изменения структуры таблицы в базе данных, к которой имеется подключение. Окно конструктора таблиц разделяется на две области.
      При переходе в конструктор таблицы, вам будет предложено ввести ее имя для сохранения. Введите имя «TEST».
      В верхней области отображается сетка, каждая строка которой описывает один столбец базы данных. Для каждого столбца отображаются его основные характеристики: имя столбца, тип данных, длина и параметр допустимости пустых значений. Создайте четыре столбца, введя приведенные ниже имена в столбец «Имя поля» конструктора:
  • ID – Первичный ключ;
  • NameUser –Столбец отвечающий за имя пользователя;
  • DateCreate – Дата создания пользователя;
  • Age - возраст пользователя.
      Так же необходимо выставить тип данных, которые будут храниться в каждом столбце. Выставьте следующие типы:
  • ID - Счетчик;
  • NameUser -Текстовый;
  • DateCreate - Дата/время;
  • Age - Числовой.
      В нижней области окна конструктора таблиц отображаются дополнительные характеристики каждого столбца, выделенного в верхней области.
      Закройте конструктор и откройте таблицу для наполнения данными. Создайте несколько записей в данной таблице.
Запустите «Microsoft Visual Studio» и перейдите в меню «Файл» - «Создать» - «Проект…».
      У вас откроется окно «Создать проект», в левой части выберете категорию «Windows», а в центральной части окна выберете шаблон «Приложение Windows Forms». Введите имя проекта и нажмите кнопку «ОК».
      После создания проекта, у вас откроется конструктор главной формы, добавьте на форму два компонента: TextBox и ComboBox.
      Для подключения к базе данных Access необходимо воспользоваться классом «OleDbConnection» с указанием строки определяющей способ подключения объекта к источнику данных и его методом «Open», открывающем подключение.
string connectionString =
 String.Format(@"Provider=Microsoft.JET.OLEDB.4.0;Data Source={0}\TextBoxAutoCompleteStringCollection.mdb", 
Application.StartupPath);
System.Data.OleDb.OleDbConnection odbcon = new System.Data.OleDb.OleDbConnection(connectionString);
odbcon.Open();
      Чтобы загрузить данные необходимо воспользоваться классом «OleDbCommand» и указать SQL команду «Select».
System.Data.OleDb.OleDbCommand odbc =
    new System.Data.OleDb.OleDbCommand("SELECT * FROM TEST", odbcon);
      Результатом выполнения данной команды SQL, будет набор данных, что для заполнения класса AutoCompleteStringCollection не подходит, необходимо воспользоваться классом «OleDbDataReader». Данный класс представляет собой поток записей только на чтение, по которому можно передвигаться только вперед, последовательно от записи к записи. Работа с ним очень напоминает чтение данных из последовательного файла. В процессе чтения в каждый момент времени, в оперативной памяти клиентского компьютера находится одна-единственная текущая запись.
System.Data.OleDb.OleDbDataReader reader = odbc.ExecuteReader();

AutoCompleteStringCollection collectionName = new AutoCompleteStringCollection();
AutoCompleteStringCollection collectionDateCreate = new AutoCompleteStringCollection();

if (reader.HasRows)
{
    while (reader.Read())
    {
        collectionName.Add(reader["NameUser"].ToString());
        collectionDateCreate.Add(reader["DateCreate"].ToString());
    }
}
      Но так же можно воспользоваться загрузкой всех данных в класс «DataTable», воспользовавшись классом «OleDbDataAdapter», представляющий набор команд данных и подключение базы данных для заполнения. Далее необходимо построчно считать значение каждой строки указанного столбца и занести в класс «AutoCompleteStringCollection».
DataTable dt = new DataTable();
System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(odbc);
adapter.Fill(dt);

AutoCompleteStringCollection collectionName =
   new AutoCompleteStringCollection();
AutoCompleteStringCollection collectionDateCreate =
   new AutoCompleteStringCollection();

foreach (DataRow row in dt.Rows)
{
    collectionName.Add(row["NameUser"].ToString());
    collectionDateCreate.Add(row["DateCreate"].ToString());                
}
Далее у компонентов необходимо в параметре AutoCompleteCustomSource указать заполненный источник данных и параметр заполнения.
textBox1.AutoCompleteCustomSource = collectionName;
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
 
comboBox1.AutoCompleteCustomSource = collectionDateCreate;
comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
      Сделайте двойной клик по свободному пространству главной формы, вы перейдете в автоматически созданный метод «Form1_Load», события «Load» происходящего при загрузке главной формы. Добавьте в него один из приведенных ниже листингов.
Вариант 1:
      Данный код реализуется с использование класса «OleDbDataReader» и построчным чтением из базы данных.

string connectionString = 
String.Format(@"Provider=Microsoft.JET.OLEDB.4.0;Data Source={0}\TextBoxAutoCompleteStringCollection.mdb",
    Application.StartupPath);
System.Data.OleDb.OleDbConnection odbcon = 
    new System.Data.OleDb.OleDbConnection(connectionString);
odbcon.Open();

System.Data.OleDb.OleDbCommand odbc =
    new System.Data.OleDb.OleDbCommand("SELECT * FROM TEST", odbcon);

System.Data.OleDb.OleDbDataReader reader = odbc.ExecuteReader();

AutoCompleteStringCollection collectionName = 
    new AutoCompleteStringCollection();
AutoCompleteStringCollection collectionDateCreate = 
    new AutoCompleteStringCollection();

if (reader.HasRows)
{
    while (reader.Read())
    {
        collectionName.Add(reader["NameUser"].ToString());
        collectionDateCreate.Add(reader["DateCreate"].ToString());
    }
}

textBox1.AutoCompleteCustomSource = collectionName;
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;

comboBox1.AutoCompleteCustomSource = collectionDateCreate;
comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;

reader.Close();
odbcon.Close();
Вариант 2:
string connectionString = 
   String.Format(@"Provider=Microsoft.JET.OLEDB.4.0;Data Source={0}\TextBoxAutoCompleteStringCollection.mdb", 
   Application.StartupPath);
System.Data.OleDb.OleDbConnection odbcon = 
   new System.Data.OleDb.OleDbConnection(connectionString);
odbcon.Open();

System.Data.OleDb.OleDbCommand odbc = 
   new System.Data.OleDb.OleDbCommand("SELECT * FROM TEST", odbcon);

DataTable dt = new DataTable();
System.Data.OleDb.OleDbDataAdapter adapter = 
   new System.Data.OleDb.OleDbDataAdapter(odbc);
adapter.Fill(dt);

AutoCompleteStringCollection collectionName = 
   new AutoCompleteStringCollection();
AutoCompleteStringCollection collectionDateCreate = 
   new AutoCompleteStringCollection();

foreach (DataRow row in dt.Rows)
{
    collectionName.Add(row["NameUser"].ToString());
    collectionDateCreate.Add(row["DateCreate"].ToString());                
}

textBox1.AutoCompleteCustomSource = collectionName;
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;

comboBox1.AutoCompleteCustomSource = collectionDateCreate;
comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;

odbcon.Close();
      Запустите проект, нажав на клавиатуре клавишу «F5». Начните вводить в текстовое поле имя сотрудника созданного в базе данных, вам будет предложено несколько вариантов автозавершения. Ниже представлен вариант работы программы с компонентом «TextBox».
В данном случае представлен пример работы автозаполнения из базы данных, для компонента «ComboBox».

Ссылка для скачивания примера: Яндекс.Диск


Комментариев нет:

Отправить комментарий

Большая просьба, не писать в комментариях всякую ерунду не по теме!