ASP.NET
Привязка данных в ASP.NET
Условия перепечатки материалов
Рейтинг статьи: 




Проголосовало 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 - http://www.dotsite.ru/
Автор: Viktor
Shatokhin
Автор: Andrew
Filev
Разместил: Vulko
Опубликовано: 03.07.2004
Статья "ASP.NET - Привязка данных в ASP.NET" прочтена 50134 раза.