Опубликован: 24.11.2006 | Уровень: специалист | Доступ: платный
Лекция 2:

Веб-формы ASP.NET

< Лекция 1 || Лекция 2: 12345 || Лекция 3 >
Обзор технологии ADO.NET

Для заполнения элемента dgChair данными из таблицы базы данных мы будем использовать ADO.NET, поэтому нужно добавить в файл showGrid.aspx пространство имен для классов данных, необходимых для доступа к источнику данных. Веб-формы по умолчанию содержат пространство имен System.Data, являющееся главным пространством имен ADO.NET. Другие пространства имен, подчиненные System.Data, поддерживают определенные типы источников данных. Стандартными пространствами имен, подчиненными System.Data, являются следующие.

System.Data.Common.
System.Data.OleDb.
System.Data.SqlClient.
System.Data.SqlTypes.

Пространство имен SqlClient обеспечивает интерфейс к провайдеру SQL Server и наиболее эффективный способ связи с SQL Server 2000. Пространство имен System.Data.OleDb поддерживает интерфейс, аналогичный традиционной технологии ADO; оно неэффективно при подключении к SQL Server 2000. System.Data.Ole.Db рекомендуется для работы с источниками данных, отличными от SQL Server 2000, имеющими провайдера OLE-DB. Пространства имен System.Data.Common и System.Data.SqlTypes обеспечивают интерфейсы для SQL Server и общие интерфейсы между SQL Server и классами OLE-DB.

ADO.NET поставляется в виде единственной библиотеки – System.Data.dll. Если необходима поддержка источника данных ODBC, Microsoft предлагает другую библиотеку (ее можно загрузить из интернета) для обеспечения пространства имен классов ODBC.

Поскольку источником данных, рассматриваемым в примерах данной лекции, является Microsoft Acess 2000, то следует использовать пространство имен OleDb. Если источником данных является SQL Server 2000, то используется пространство имен SqlClient – это наиболее эффективный способ установки связи с SQL Server 2000. Вверху файла showGid.aspx необходимо вместе с остальными директивами пространства имен ввести следующую строку кода:

using System.Data.OleDb; //for the OleDb classes
Использование классов ADO.NET для заполнения элемента управления DataGrid

После установки соединения выполняется запрос экземпляра набора данных ADO.NET myDataSet таблицы tblChairs базы данных. Набору данных DataSet при инициализации присваивается имя myChairs. Инициализируется объект ADO.NET Adaptor для заполнения экземпляра myDataSet. После этого инициализируется объект ADO.NET DataView с именем myDataView с использованием первой таблицы набора данных myDataSet. В итоге аргумент DataGrid с именем dg, переданный подпрограмме, устанавливает свойство источника данных на экземпляр DataView с именем myDataView, и вызывает метод DataBind аргумента dg для заполнения экземпляра dg элемента DataGrid данными из таблицы tblChairs.

Использование класса DataView не является обязательным, если нужно отобразить весь набор данных DataSet. В элементе dg (см. листинге 2.10) отображается весь созданный набор данных DataSet, поэтому можно опустить следующую строку:

DataView myDataView = new DataView(myDataSet.Tables[0]);

Свойство DataSource элемента dg установим равным значению Tables[0] свойства набора данных myDataSet. Строку, присваивающую dg.DataSource источнику myDataView, изменим следующим образом:

dg.DataSource = myDataSet.Tables[0]

При нажатии на клавишу F5 будет скомпилирована страница showGrid.aspx, затем откроется окно браузера с отображением данных в таблице myChairs (см. рис. 2.6).

Отображение результатов работы showGrid.aspx с использованием DataGrid

Рис. 2.6. Отображение результатов работы showGrid.aspx с использованием DataGrid
Применение элемента управления DataList

Помимо DataGrid для отображения информации из базы данных используются и другие типы элементов управления данными. Элемент управления DataList применяется для отображения данных в формате, отличном от табличной формы. В листинге 2.11 приведен исходный код файла datalist.aspx.cs, представляющий собой веб-форму, в которой элемент управления DataList заполняется данными с помощью набора ADO.NET Dataset.

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb; //for the OleDb classes
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace SimpleWF
{
  /// <summary>
  /// Summary description for datalist.
  /// </summary>
  public class datalist : System.Web.UI.Page
  {
   protected System.Web.UI.WebControls.DataList dlChair;
  
   private void LoadList(DataList dl)
   {
    //set the connection credentials
    string DataSetName = "myChairs";
    string ConnectionString =
     "Provider=Microsoft.Jet.OLEDB.4.0;" + 
   "Data Source=C:\\aspData\\employees.mdb;";

    //make the DB connection
    OleDbConnection myConn = new
     OleDbConnection(ConnectionString);

    //make a data set to hold chairs
    DataSet myDataSet = new DataSet(DataSetName);

    //make a data adaptor
    OleDbDataAdapter myAdapt = new
     OleDbDataAdapter("Select * From tblChair", myConn);
     

    //fill the dataset
    myAdapt.Fill(myDataSet);

    //show the data in the data list
    dl.DataSource = myDataSet;
    dl.DataBind();
   }
   private void Page_Load(object sender, System.EventArgs e)
   {
    LoadList(this.dlChair);
   }
   #region Web Form Designer generated code
   override protected void OnInit(EventArgs e)
   {
    //
    // CODEGEN: This call is required by the 
    // ASP.NET Web Form Designer.
    //
    InitializeComponent();
    base.OnInit(e);
   }
   
   /// <summary>
   /// Required method for Designer support - do not modify
   /// the contents of this method with the code editor.
   /// </summary>
   private void InitializeComponent()
   { 
    this.Load += new System.EventHandler(this.Page_Load);
   }
   #endregion
  }
}
Листинг 2.11. Web Form Featuring the Use of the DataList Control

DataList использует иной механизм построения DataSet, называемый шаблоном. Шаблон описывает способ отображения данных в элементе управления DalaList. Щелкните правой кнопкой мыши на DataList и выберите любую из опций редактирования шаблона в команде Edit Template (Изменить шаблон) контекстного меню. В шаблоне настраиваются заголовки или имена полей, определяющие отображение данных. В DataList присутствуют также верхние, нижние колонтитулы и названия. Для указания данных из определенного набора DataSet необходимо изменить шаблон в представлении HTML. Теги <%# и %> означают присоединение данных в странице веб-формы. В коде шаблона указываются поля присоединения данных. В листинге 2.12 приведен код файла datalist.aspx, отображаемый в представлении HTML.

<%@ Page language="c#" Codebehind="datalist.aspx.cs" 
 AutoEventWireup="false" Inherits="SimpleWF.datalist" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
  <HEAD>
   <title>datalist</title>
  <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
  <meta name="CODE_LANGUAGE" Content="C#">
  <meta name="vs_defaultClientScript" content="JavaScript">
  <meta name="vs_targetSchema"
   content="http://schemas.microsoft.com/intellisense/ie5">
  </HEAD>
  <body MS_POSITIONING="GridLayout" bgColor="#ffffff">
   <form id="datalist" method="post" runat="server">
    <asp:DataList id="dlChair" style=
     "Z-INDEX: 102; LEFT: 18px; POSITION: absolute;
      TOP: 34px" runat="server" Height="301px" 
      Width="316px">
     <ItemTemplate>
     <DIV style="PADDING-RIGHT: 15px; 
        PADDING-LEFT: 15px; PADDING-BOTTOM: 
        15px; FONT: 12pt verdana; 
        COLOR: black; PADDING-TOP: 15px" 
        align="left">ID:</DIV>
     <%# DataBinder.Eval(Container.DataItem, "ID")%>
     <DIV style="PADDING-RIGHT: 15px; PADDING-LEFT: 
       15px; PADDING-BOTTOM: 15px; 
       FONT: 12pt verdana; 
       COLOR: black; PADDING-TOP: 15px" 
       align="left">Color:</DIV>
     <%# DataBinder.Eval(Container.DataItem, "Color")%>
     </ItemTemplate>
    </asp:DataList>
   </form>
  </body>
</HTML>
Листинг 2.12. HTML for datalist.aspx Featuring Data Binding Expressions

DataList определяется элементами HTML <asp:DataList>. Внутри тегов элемента DataList располагаются теги шаблона, определяемые тегом <ItemTemplate>. Свойства шаблона в дизайнере веб-форм генерируют теги внутри тегов <ItemTemplate>, однако их можно отредактировать вручную в представлении HTML. Теги присоединения данных можно стратегически расположить внутри шаблона в тех местах, где должны отображаться соответствующие поля набора данных DataSet. В листинге 2.12 приведены два поля из отображаемого набора DataSetID и Color. Тег присоединения для поля ID имеет вид <%#DataBinder.Eval(Container.DataItem, "ID")%>, а тег присоединения поля Color<%#DataBinder.Eval(Container.DataItem, "Color")%>.

При запуске datalist.aspx сгенерирован тот же набор DataSet, как в примере с элементом DataGrid (см. рис. 2.6). Однако формат данных отличается от предыдущего примера (см. рис. 2.7), поскольку данные отформатированы по шаблону, приведенному в листинге 2.12.


Рис. 2.7.
< Лекция 1 || Лекция 2: 12345 || Лекция 3 >
Дмитрий Васюков
Дмитрий Васюков
Россия, Брянск
Maxim Kuzmin
Maxim Kuzmin
Россия