382 MGraphics.ru - ASP.NET - Привязка данных в ASP.NET
Уроки photoshopa


ASP.NET

Привязка данных в ASP.NET

Условия перепечатки материалов

Рейтинг статьи: 22222
Проголосовало 13 человек.
Оцените статью:

Привязка данных в ASP.NET

В .NET-формах есть замечательная возможность - привязка данных (data binding). Эта технология позволяет нароямую связывать свойства контролов на формах с данными. В Веб-формах он используется, в основном, для вывода таблиц и списков.

Например, нам нужно вывести список книг в виде таблицы. С использованием data binding код такой формы может выглядеть так:

    Default.aspx

<%@ Page language="c#" Codebehind="Default.aspx.cs" AutoEventWireup="false" Inherits="ru.spb.dotSITE.Portal.Tutorials.ASP.NET.Working_with_data.Data_Binding_Application._Default" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>Default</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">
        <form id="Default" method="post" runat="server">
            <asp:DataGrid id="grdBooks" style="Z-INDEX: 101; LEFT: 39px; POSITION: absolute; TOP: 30px" runat="server" Width="481px" Height="218px">
                <SelectedItemStyle BackColor="#FFC0C0"></SelectedItemStyle>
                <AlternatingItemStyle BackColor="#E0E0E0"></AlternatingItemStyle>
            </asp:DataGrid>
        </form>
    </body>
</HTML>
    
    Default.aspx.cs

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
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 ru.spb.dotSITE.Portal.Tutorials.ASP.NET.Working_with_data.Data_Binding_Application
{
    /// 
    /// Summary description for _Default.
    /// 
    public class _Default : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.DataGrid grdBooks;
    private ArrayList books;
  
        private void Page_Load(object sender, System.EventArgs e)
        {       
      if (!Page.IsPostBack)
      {
        books = new ArrayList();

        books.Add(new Book("The Catcher In The Rye", "J.L. Salinger", 183));
        books.Add(new Book("Programming Windows", "Charles Petzold", 300));
        books.Add(new Book("Design Pattterns: Elements Of Reusable Object-Oriented Software", "Gamma et el.", 200));      

        grdBooks.DataSource = books;

        DataBind();
      }
        }

        #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);
        }
        
        /// 
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// 
        private void InitializeComponent()
        {    
      this.grdBooks.SelectedIndexChanged += new System.EventHandler(this.grdBooks_SelectedIndexChanged);
      this.Load += new System.EventHandler(this.Page_Load);

    }
        #endregion

    private void grdBooks_SelectedIndexChanged(object sender, System.EventArgs e)
    {
      
    }
    }
}
    
    Book.cs
using System;

namespace ru.spb.dotSITE.Portal.Tutorials.ASP.NET.Working_with_data.Data_Binding_Application
{
  /// 
  /// Summary description for Book.
  /// 
  public class Book
  {
    private string _title;
    private string _author;
    private int _pages;

    public string Title
    {
      get { return _title; }
      set { _title = value; }
    }

    public string Author
    {
      get { return _author; }
      set { _author = value; }
    }

    public int Pages
    {
      get { return _pages; }
      set { _pages = value; }
    }

    public Book( string title, string author, int pages )
    {
      Title = title;
      Author = author;
      Pages = pages;
    }
  }        
}
    

На самом деле из всего этого кода нам важен кусок:

books = new ArrayList();

books.Add(new Book("The Catcher In The Rye", "J.L. Salinger", 183));
books.Add(new Book("Programming Windows", "Charles Petzold", 300));
books.Add(new Book("Design Pattterns: Elements Of Reusable Object-Oriented Software", "Gamma et el.", 200));      

grdBooks.DataSource = books;

DataBind();
    

Здесь мы создаем некоторый набор данных и привязываем его к Data Grid одной строчкой. Компонент сам определяет названия колонок и заполняет сетку данными. Причем вместо ArrayList мы можем передать, например, массив или DataSet. В результате мы получим следующее.

Также можно вывести тот же список, но в том формате, который удобен в данном случае. Для этого можно применить контрол DataList или Repeater:

    Default.aspx
<%@ Page language="c#" Codebehind="Default.aspx.cs" AutoEventWireup="false" Inherits="ru.spb.dotSITE.Portal.Tutorials.ASP.NET.Working_with_data.Data_Binding_Application_2._Default" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>Default</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="FlowLayout">
        <form id="Default" method="post" runat="server">
            <asp:DataList id="DataList1" runat="server">
                <ItemTemplate>
                    <b><%# DataBinder.Eval(Container.DataItem, "Title") %></b><br>
                    <i>by <%# DataBinder.Eval(Container.DataItem, "Author") %></i>
                </ItemTemplate>
            </asp:DataList>
        </form>
    </body>
</HTML>
    
    Default.aspx.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

using ru.spb.dotSITE.Portal.Tutorials.ASP.NET.Working_with_data.Data_Binding_Application;

namespace ru.spb.dotSITE.Portal.Tutorials.ASP.NET.Working_with_data.Data_Binding_Application_2
{
    /// 
    /// Summary description for _Default.
    /// 
    public class _Default : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.DataList DataList1;
  
        private void Page_Load(object sender, System.EventArgs e)
        {           
      if (!Page.IsPostBack)
      {
        ArrayList books = new ArrayList();

        books.Add(new Book("The Catcher In The Rye", "J.L. Salinger", 183));
        books.Add(new Book("Programming Windows", "Charles Petzold", 300));
        books.Add(new Book("Design Pattterns: Elements Of Reusable Object-Oriented Software", "Gamma et el.", 200));      

        DataList1.DataSource = books;

        DataBind();
      }
        }

        #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);
        }
        
        /// 
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// 
        private void InitializeComponent()
        {    
      this.Load += new System.EventHandler(this.Page_Load);

    }
        #endregion
    }
}
    

Посмотрим как реализуется кустомизация формата вывода. Для этого задается так называемый шаблон элемента (item template) в теге <ItemTemplate>. В нем задается ASP.NET-код, который будет выведен для каждого элемента списка. Чтобы варьировать код в зависимости от реального содержания элеиента, применяется тег <%# .. %>. Внутри него можно указывать программный код, который будет выполняться индивидуально для каждого элемента. Доступ из такого кода к текущему элементу осуществляется через свойство Container.DataItem.

Copyright by © 2000-2004 dotSITE
Автор:
Автор:

Разместил: Vulko
Опубликовано: 03.07.2004
Статья "ASP.NET - Привязка данных в ASP.NET" прочтена 50760 раз.





Последние новости