Компоненты данных ADO.NET
Поиск определенных строк в извлеченных автономных данных
Класс DataTable имеет метод Select(), позволяющий извлекать из заполненного DataSet массив объектов-строк DataRow по дополнительному условию на основе SQL-выражения. Чтобы проиллюстрировать этот метод, модифицируем последний пример.
-
Сделайте из страницы DataSetRelationShips.aspx копию с именем DataTableSelect.aspx
-
Заполните файл DataTableSelect.aspx.cs следующим кодом
using System;
using System.Data;
using System.Web.Configuration;
using System.Data.SqlClient;
using System.Text;
public partial class DataSetRelationShips : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Извлекаем строку соединения с именем Northwind из файла web.config
string connectionString = WebConfigurationManager.
ConnectionStrings["Northwind"].ConnectionString;
// Создаем объект соединения
SqlConnection con = new SqlConnection(connectionString);
// Формируем строку SQL-запроса для заданных полей
string sqlProducts = "SELECT ProductName, Discontinued FROM Products";
// Создаем и настраиваем объект DataAdapter
SqlDataAdapter adapter = new SqlDataAdapter(sqlProducts, con);
// Создаем пустой объект DataSet набора данных
DataSet dataset = new DataSet();
// Выполняем запрос к БД с автоматическим
// открытием и закрытием соединения
try
{
// Добавить в DataSet данные с именованной
// меткой ProdTable из таблицы Products
adapter.Fill(dataset, "ProdTable");
}
catch
{
throw new ApplicationException("Ошибка данныx.");
}
// Получить по дополнительному условию
// массив продуктов, имеющих скидки
DataRow[] matchRows = dataset.Tables["ProdTable"].
Select("Discontinued <> 0"); // Дополнительное условие
// Выбрать имена продуктов со скидками
StringBuilder htmlStr = new StringBuilder("");
htmlStr.Append("<ol>"); // Открыли нумерованный список HTML
foreach (DataRow row in matchRows)
{
htmlStr.Append("<li>"); // Элемент маркированного списка HTML
htmlStr.Append(row["ProductName"].ToString()); // Имя поля
htmlStr.Append("</li>");
}
htmlStr.Append("</ol>"); // Закрыли нумерованный список HTML
// Отображаем полученные данные пользователю
lblInfo.Text = "<h2>Список продуктов,<br />имеющих скидки</h2>";
lblInfo.Text += htmlStr.ToString();
}
}Приведенный код примера достаточно прост. Из данных, загруженных в DataSet по SQL-запросу, мы выбираем данные в массив строк по дополнительному условию.
-
Исполните страницу DataTableSelect.aspx, чтобы получить следующий результат
Список продуктов, имеющих скидки
Первое знакомство с механизмом привязки извлекаемых автономных данных
Иногда более удобно не самому формировать HTML-вывод для изъятых из базы автономных данных, как мы это делали до сих пор, а воспользоваться специальным механизмом привязки данных, который позаботится о правильном представлении данных пользователю. Самым простым в использовании для привязки и отображении данных является элемент управления GridView. Он автоматически формирует HTML-таблицы, в ячейки которых выводит данные, загруженные в набор данных DataSet. Порядок привязки набора данных dataset к экземпляру GridView1 класса GridView следующий:
- Подключить набор данных
GridView1.DataSource = dataset;
- Указать именованную метку таблицы в наборе данных, подлежащих отображению
GridView1.DataMember = "TableLabel";
- Загрузить привязанные данные в конкретный элемент отображения или сразу во все элементы отображения страницы
GridView1.DataBind(); или Page.DataBind();
Если мы вызовем Page.DataBind(), то он пройдет по всем элементам управления страницы, поддерживающих привязку данных, и для каждого вызовет метод DataBind().
Приведем пример страницы , в которой загрузим и отобразим пользователю первые пять строк таблицы Employees учебной базы данных Northwind.
-
Добавьте к приложению WebSite8 новую страницу с раздельным кодом и именем GridViewEmployees.aspx. Назначьте эту страницу стартовой -
Поместите на страницу из вкладки Data панели Toolbox элемент управления GridView с именем GridView1
-
Откройте на редактирование файл поддержки GridViewEmployees.aspx.cs и заполните его следующим кодомusing System; using System.Data; using System.Web.Configuration; using System.Data.SqlClient; public partial class GridViewEmployees : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // Содать Connection, DataAdapter и DataSet string connectionString = WebConfigurationManager. ConnectionStrings["Northwind"].ConnectionString; SqlConnection con = new SqlConnection(connectionString); string sql = "SELECT TOP 5 EmployeeID, TitleOfCourtesy, LastName, " + "FirstName FROM Employees"; SqlDataAdapter adapter = new SqlDataAdapter(sql, con); DataSet dataset = new DataSet(); adapter.Fill(dataset, "EmployeesTable"); // Привязать данные к GridView1 для отображения GridView1.DataSource = dataset; GridView1.DataMember = "EmployeesTable"; GridView1.DataBind(); } } -
Исполните страницу GridViewEmployees.aspx, чтобы получить следующий результат
| EmployeeID | TitleOfCourtesy | LastName | FirstName |
|---|---|---|---|
| 1 | Ms. | Davolio | Nancy |
| 2 | Dr. | Fuller | Andrew |
| 3 | Ms. | Leverling | Janet |
| 4 | Mrs. | Peacock Margaret | |
| 5 | Mr. Buchanan | Steven |
К элементу отображения можно привязать сразу конкретную таблицу из набора данных. В этом случае строки привязки будут выглядеть так (страница GridViewEmployees1.aspx )
// Привязать данные к GridView1 для отображения GridView1.DataSource = dataset.Tables["EmployeesTable"]; GridView1.DataBind();
Более того, существует класс DataView, который является представлением класса DataTable, с помощью которого можно предварительно отсортировать или отфильтровать данные перед привязкой к элементу управления GridView для показа пользователю.