Опубликован: 07.05.2010 | Доступ: свободный | Студентов: 1678 / 62 | Оценка: 4.56 / 4.06 | Длительность: 34:11:00
Лекция 12:

Компоненты данных 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, чтобы получить следующий результат

Список продуктов, имеющих скидки

  1. Chef Anton's Gumbo Mix
  2. Mishi Kobe Niku
  3. Alice Mutton
  4. Guaranс Fantсstica
  5. RЎssle Sauerkraut
  6. Th№ringer Rostbratwurst
  7. Singaporean Hokkien Fried Mee
  8. Perth Pasties

Первое знакомство с механизмом привязки извлекаемых автономных данных

Иногда более удобно не самому формировать HTML-вывод для изъятых из базы автономных данных, как мы это делали до сих пор, а воспользоваться специальным механизмом привязки данных, который позаботится о правильном представлении данных пользователю. Самым простым в использовании для привязки и отображении данных является элемент управления GridView. Он автоматически формирует HTML-таблицы, в ячейки которых выводит данные, загруженные в набор данных DataSet. Порядок привязки набора данных dataset к экземпляру GridView1 класса GridView следующий:

  1. Подключить набор данных
    GridView1.DataSource = dataset;
  2. Указать именованную метку таблицы в наборе данных, подлежащих отображению
    GridView1.DataMember = "TableLabel";
  3. Загрузить привязанные данные в конкретный элемент отображения или сразу во все элементы отображения страницы
    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 для показа пользователю.