日期:2008-04-27  浏览次数:20426 次

begin:

Mastering ASP.Net DataBinding
Karl Seguin ?karlseguin@hotmail.com


Table of Contents
Introduction
The Sample Program
Understanding DataItem
Formatting
Inline
OnItemDataBound
OnItemCreated
Nested Binding
Inline
OnItemDataBound
Handling Events
Download

This article is available at Code Project. Check it out to make comments, discuss or rate the article

I'd like to thank Jean-Claude Manoli for developing his C# Code format, which i used in writing this tutorial.
Introduction
Questions regarding databinding, in one form or another, are probably the most asked in the ASPnet newsgroups. Its clear everyone loves the idea of databinding but that more advanced functionality, such as event handling, conditional formatting and fine-tuning, aren't straightforward. The goal of this tutorial is shed light on some of the more common and frequently asked questions about the capabilities of databinding.
The Sample Program
Throughout this tutorial we'll use two separate data sources. The first will be your every-day dataset, the other will be a strongly-typed custom collection containing strongly-typed objects.

Our dataset will contain two tables, Customers and Orders:
Customer Structure Order Structure
Name Type Description Name Type Description
CustomerId1 Int32 Unique customer identifier OrderId Int32 Unique order identifier
Name String Name of the customer CustomerId1 Int32 Identifier of the custom who placed the order
Zip String Customer's primary ZIP or Portal code Ordered DateTime Date the order was placed on
Enabled Boolean Whether the customer is currently active/enabled Amount Decimal Dollar value of the order

1A DataRelation exists between the Customer.CustomerId and Order.CustomerId columns.

Our business entities will consist of an Owner and a Pet class:
Owner Structure Pets Structure
Name Type Description Name Type Description
OwnerId Int32 Unique owner identifier PetId Int32 Unique pet identifier
YearOfBirth Int32 The year the owner was born in Name String Name of the pet
FirstName String Owner's first name IsNeutured Boolean Whether or not the pet is neutured
LastName String Owner's last name Type PetType Indicates the type of pet (Dog, Cat, Fish, Bird, Rodent, Other)
Pets PetCollection Collection of pets the owner has

Understanding DataItem
You've undoudbtedly made frequent use of the DataItem property, namely when using the DataBinding syntax to output a value:
1: <%# DataBinder.Eval(Container.DataItem, "customerId") %>
It's important to understand that DataItem is actually an object, and that when you use the DataBinder.Eval function, it basically needs to figure out what type of object it is and how to get "customerId" from it. That's because your DataSource can be different things, such as a dataset or dataview, an arraylist or hashtable, a custom collection and more. Binding happens on a row-by-row basis and DataItem actually represents the current row being bound. For a DataSet, DataTable or DataView DataItem is actually an instance of DataRowView (you might think that the DataItem for a DataSet or DataTable would be an instance of DataRow, but when you bind either of these, the DefaultView is actually used, therefore DataItem will always be a DataRowView). When you are binding to a collection, DataItem is an instance of the item within the collection. We can observe this more clearly with the following code:
1: <%@