转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
Mastering ASP.Net DataBinding         ★★★★
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 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:  <%@ Import namespace="System.Data" %>
   2:  <%@ Import namespace="BindingSample" %>
   3:  <asp:Repeater id="dataSetRepeater" Runat="server">
   4:   <ItemTemplate>
   5:    <%# ((DataRowView)Container.DataItem)["customerId"] %> -  
   6:    <%# ((DataRowView)Container.DataItem)["Name"] %> <br />
   7:   </ItemTemplate>   
   8:   <AlternatingItemTemplate>
   9:    <%# DataBinder.Eval(Container.DataItem, "customerId") %> -  
  10:    <%# DataBinder.Eval(Container.DataItem, "Name") %> <br />
  11:   </AlternatingItemTemplate>                    
  12:  </asp:Repeater>
  13:  
  14:  <br><br>
  15:  
  16:  <asp:Repeater id="collectionRepeater" Runat="server">
  17:   <ItemTemplate>
  18:    <%# ((Owner)Container.DataItem).OwnerId %> -  
  19:    <%# ((Owner)Container.DataItem).FirstName %> <br />
  20:   </ItemTemplate>    
  21:   <AlternatingItemTemplate>
  22:    <%# DataBinder.Eval(Container.DataItem, "OwnerId") %> - 
  23:    <%# DataBinder.Eval(Container.DataItem, "FirstName") %> <br />
  24:   </AlternatingItemTemplate>        
  25:  </asp:Repeater>
In the first repeater we are binding to a DataSet, the ItemTemplate shows how to access values by casting DataItem to a DataRowView [5,6], the AlternateItemTemplate will output the same information but through DataBinder.Eval [9,10].

In the second repeater we bind to a custom collection, again the ItemTemplate shows how to cast DataItem to the right type and access the fields directly [18,19] while the AlternateItemTemplate shows how the same is accomplished with DataBinder.Eval [22,23].

In both cases the ItemTemplate and AlternateItemTemplate will output the exact same information. The only difference is how the information is retrieved. DataBinder.Eval is far less performant, but has the benefit of being ignorant of the underlying structure, making it both quicker to develop and more likely to resist future changes. The goal here isn''''t to discuss the merits of these approaches, but simply show what DataItem truly is in order to build a proper foundation of understanding.

Formatting

Inline

While binding its possible to do simple formatting directly in the databinding expression or by calling functions which reside in codebehind.
   1:  <asp:Repeater id="dataSetRepeater" Runat="server">
   2:   <ItemTemplate>
   3:    <%# DataBinder.Eval(Container.DataItem, "OrderId")%> -  
   4:    <%# FormatDate(DataBinder.Eval(Container.DataItem, "Ordered"))%> -
   5:    <%# FormatMoney(DataBinder.Eval(Container.DataItem, "Amount"))%> <br />
   6:   </ItemTemplate>
   7:  </asp:Repeater>
   8:   
   9:  <br ><br >
  10:   
  11:  <asp:Repeater id="collectionRepeater" Runat="server">  
  12:   <ItemTemplate>
  13:    <%# DataBinder.Eval(Container.DataItem, "OwnerId") %> - 
  14:    <asp:literal ID="see" Runat="server" 
  15:       Visible=''''<%# (int)DataBinder.Eval(Container.DataItem, "Pets.Count") > 0 %>''''>
  16:       see pets
  17:    </asp:Literal>
  18:    <asp:literal ID="nopets" Runat="server" 
  19:       Visible=''''<%# (int)DataBinder.Eval(Container.DataItem, "Pets.Count") == 0 %>''''>
  20:       no pets
  21:    </asp:Literal>
  22:    <br />
  23:   </ItemTemplate>
  24:  </asp:Repeater>
The second repeater makes use of directly embedded expressions to toggle the visibility of certain controls [15,19]. The first repeater, which is bound to all Orders, makes use of two functions: FormatDate [4] and FormatMoney [5]. These methods could look something like:
   1:  protected string FormatDate(object date) {
   2:   if (date == DBNull.Value){
   3:    return "n/a";
   4:   }
   5:   try{
   6:    return ((DateTime)date).ToShortDateString();
   7:   }catch{
   8:    return "n/a";
   9:   }
  10:  }
  11:  protected string FormatMoney(object amount) {
  12:   if (amount == DBNull.Value){
  13:    return String.Format("{0:C}", 0);
  14:   }
  15:   return String.Format("{0:C}", amount);
  16:  }

OnItemDataBound

While the above method is suitable for quick and simple problems, it lacks in elegance and capacity. Indeed, the 2nd example shows a serious lack of grace and dangerously blends presentation logic with UI. Avoiding burdening your presentation layer with any code is a practice worth eternal vigilence. To help accomplish this, the repeater, datalist and datagrid all expose a very powerful and useful event: OnItemDataBound.

OnItemDataBound fired for each row being bound to your datasource (in addition to when other templates are bound (header, footer, pager, ..)), it not only exposes the DataItem being used in binding, but also the complete template. OnItemDataBound starts to fire as soon as the DataBind() method is called on the repeater/datalist/datagrid.

Using OnItemDataBound lets us exercise fine control over exactly what happens during binding in a clean and robust framework. For example, reworking the 2nd repeater from above, we get:
   1:  <asp:Repeater OnItemDataBound="itemDataBoundRepeater_ItemDataBound" id="itemDataBoundRepeater" Runat="server">  
   2:   <ItemTemplate>
   3:    <%# DataBinder.Eval(Container.DataItem, "OwnerId") %> - 
   4:    <asp:Literal ID="see" Runat="server" /> <br />
   5:   </ItemTemplate>        
   6:  </asp:Repeater>

[1] [2] [3]  下一页


[Web开发]一个关于ASP运行时间计算的代码  [Web开发]ASP:检测含有中文字符串的实际长度
[Web开发]asp 中英文字符长度检测判断函数  [Web开发]安全维护 IIS asp 站点的高级技巧
[Access]ASP&SQL让select查询结果随机排序的实现方法  [Web开发]ASP字符串截取函数
[Web开发][asp]关键词只替换一次的写法  [Web开发]Asp无组件生成缩略图方法详解
[Web开发]asp编程中优化数据库方法详解  [Web开发]三种方法教你asp如何去除html标记

Mastering ASP.Net DataBinding

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1911 更新时间:2009/4/23 10:44:25
source:
http://openmymind.net/databinding/index.html

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 Name Type Description Name Type Description
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台