Просмотр данных средствами ADO.NET с привязкой на этапе выполнения
Поиск записей с помощью объекта DataRow
Объект DataTable позволяет применить в программе еще один объект DataRow, который дает возможность выполнить поиск конкретной строки в таблице данных. Это удобно, если в форме необходимо предоставить пользователям некоторый механизм поиска данных.
Для разнообразия в этом упражнении вместо элемента управления ListBox мы будем использовать элемент управления ComboBox. Различие между этими двумя элементами управления только в том, что в них применяются разные способы выборки элементов.
При выборке элемента в ComboBox активизируется событие SelectIndexChanged. В обработчике этого события можно узнать значение свойства SelectItem, чтобы определить значение свойства ValueMember выбранной пользователем строки. Затем это значение можно передать в качестве параметра методу Find() коллекции Rows объекта DataTable. После успешного поиска строки данных значения ее полей загружаются в текстовые поля для показа пользователю.
Таким образом, при загрузке формы выбирается имя заказчика из раскрывающегося списка и текстовые поля заполняются данными найденной строки.
-
Добавьте
к приложению новую форму с именем Form3 точно
так, как мы добавляли Form0. -
Введите
в форму элементы управления в соответствии с таблицей
-
Настройте
интерфейс пользователя так, как показано на снимке
-
Объявите
внутри класса (можно в начале, можно в конце) как его закрытые
члены две ссылочных переменных, которые будут использованы
в методах класса. Кроме того, нужно предусмотреть булеву
переменную flag для
контроля над завершением загрузки данных из базы. При загрузке
формы автоматически будет срабатывает обработчик выбора
элемента ComboBox и будет пытаться получить ссылку на данные,
которые еще не загружены в источник данных. Булева переменная
и будет контролировать это состояние.
// Windows Form Designer generated code // Объявляем ссылочные переменные-члены // класса Form3 для доступа из методов private System.Data.OleDb.OleDbDataAdapter adapter; private System.Data.DataTable table; bool flag = false;// Признак, что данные загруженыЛистинг 8.7. Объявление ссылочных переменных-членов класса Form3
-
Создайте
для формы Form3 обработчик события Load
-
Заполните
обработчик следующим кодом
private void Form3_Load(object sender, System.EventArgs e)
{
// Сброс надписей в боксах
cboCustomers.Text
= txtCustomerID.Text
= txtCompanyName.Text
= txtAddress.Text
= txtCity.Text = "";
// Выполнение в защищенном режиме с перехватом исключений
try
{
// Создать объект таблицы данных
table = new System.Data.DataTable();
// Создать адаптер данных
adapter = new System.Data.OleDb.OleDbDataAdapter(
"SELECT * FROM Customers",
Form1.BuildCnnStr("localhost", "Northwind"));
// Заполнить таблицу данных из адаптера данных
adapter.Fill(table);
// Создать столбец для хранения первичного ключа
System.Data.DataColumn[] column = new System.Data.DataColumn[1];
// Задать первичный ключ для таблицы данных
column[0] = table.Columns["CustomerID"];
table.PrimaryKey = column;
// Связать ComboBox с данными
cboCustomers.DataSource = table;
cboCustomers.DisplayMember = "CompanyName";
cboCustomers.ValueMember = "CustomerID";
flag = true; // Данные загружены!!!
}
catch(System.Data.OleDb.OleDbException oextData)
{
// Обработать возникшее исключение
MessageBox.Show(oextData.Message);
}
}
Листинг
8.8.
Код выборки данных при загрузке формы
-
Создайте
обработчик выбора пользователем элемента в ComboBox
-
Заполните
обработчик следующим кодом
private void cboCustomers_SelectedIndexChanged(object sender, System.EventArgs e)
{
if(!flag) return;// Данные еще не готовы!!!
System.Data.DataRow row; // Объявлена ссылка на строку поиска
System.Object[] aFindValue = new Object[1];// Место под передаваемый объект
// Передать искомый элемент и воспользоваться методом поиска
aFindValue[0] = cboCustomers.SelectedValue;
row = table.Rows.Find(aFindValue);
// Заполнить текстовые поля формы из найденной строки таблицы
txtCustomerID.Text = row["CustomerID"].ToString();
txtCompanyName.Text = row["CompanyName"].ToString();
txtAddress.Text = row["Address"].ToString();
txtCity.Text = row["City"].ToString();
}
Листинг
8.9.
Обработчик выбора пользователя в ComboBox
-
Поместите
в форму Form0 текстовую метку и кнопку. Текстовую метку
в свойстве Text заполните так
Выборка данных с использованием объекта DataRow
-
Подстройте
параметр Font и TextAlign текстовой метки так, чтобы было
красиво. -
Создайте
в форме Form0 обработчик для новой кнопки и заполните его
так
private void button3_Click(object sender, System.EventArgs e)
{
Form3 frm = new Form3();
frm.Show();
}
Листинг
8.10.
Обработчик для кнопки открытия формы Form3
- Постройте приложение и проверьте работоспособность формы Form3. Результат внешне должен выглядеть примерно так



