Компоненты данных 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 для показа пользователю.