返回“ASP.NET 2.0数据教程目录”
导言
在前面的教程里我们学习了DataList提供了一些风格样式的属性. 而且我们还学习了如何定义HeadStyle, ItemStyle, AlternatingItemStyle, 和 SelectedItemStyle等属性的默认CSS.除了这四个属性外,DataList还提供了其它 属性,比如Font, ForeColor, BackColor, 和BorderWidth.而Repeater没有提供任 何这样的属性.如果你需要用Reperter来实现这些效果,你就需要在templates里直接写标记语言.
通常,数据需要怎样的格式取决于数 据本身.比如,我们可能使用灰色的字体列出那些被停止使用的product,或者在 UnitsInStock等于0的时候显示高亮.前面的教程里我们已经学习了GridView, DetailsView, 和FormView 都提供了两种截然不同的格式化数据的方 法.
DataBound 事件— 为DataBound 事件创建一个合适的event handler, 它在数据绑定到item的时候激发(对GridView来说是RowDataBound 事件 ;对 DataList 和Repeater来说是 ItemDataBound 事件). 在这些事件里, 刚刚绑 定的数据可以被格式化. 参见基于数据的自定义格式化这章.
Templates 的格式化功能— 在DetailsView 或GridView 里使用TemplateFields , 或 在FormView 里使用template , 我们可以在ASP.NET page的code-behind class里 或者BLL里,或者任何其它web程序里可以调用的类库里加格式化信息. 这种格式化 功能可以接收任意的输入参数, 但是在template里比如返回HTML . 格式化功能最 早在在GridView控件中使用TemplateField 这章里谈到过.
这两种方法都 可以在DataList和Repeater里使用.在本章里我们将一步步用这两种方法在这两个 控件里做示例.
使用ItemDataBound Event Handler
当数据绑定到 DataList时, 无论是使用数据源控件或者 直接在代码里使用DataSource和 DataBind() , DataList的DataBinding 事件都会被激发. DataList 为数据源的 每条记录创建一个 DataListItem 对象,然后绑定到当前记录. 在这个过程中 DataList 激发两个事件:
ItemCreated — 在创建DataListItem 后 激发
ItemDataBound — 当前记录绑定到DataListItem 后激发
下面列出了DataList数据绑定过程的大概步骤
DataList的 DataBinding event 被激发
DataList
对数据源的每条记 录...
For each record in the data source…
创建一个 DataListItem 对象
激发ItemCreated event
绑定记录到 DataListItem
激发ItemDataBound event
将DataListItem 添加到 Items collection
当数据绑定到Repeater时,和上面所说的情况一样.唯一 的区别在于,DataListItem换成了RepeaterItem.
注意:细心的读者可能注 意到了DataList和Repeater绑定到数据时的步骤顺序和GridView有些许差别.在数 据绑定过程的后期,GridView会激发DataBound事件,而DataList和Repeater则都没 有这个事件.
和GridView一样,可以为ItemDataBound事件创建一个event handler 来格式化数据.这个event handler 可以处理刚刚绑定到DataListItem或 RepeaterItem的数据,来按照需要进行格式化.
对DataList来说,可以使用 风格样式相关的属性,如Font, ForeColor, BackColor, CssClass等,来格式化 item.而如果你想格式化Datalist里的template里的web控件,你需要编程去获取这 些控件,然后来控制.我们在Custom Formatting Based Upon Data一章里已经看过 怎样做.和Repeater控件一样,RepeaterItem类也没有风格样式相关的属性,因此, 你需要在ItemDataBound event handler里编程去实现.
由于在DataList和 Repeater里使用ItemDataBound格式化技术从本质上来说是由于的,因此我们的示 例主要讲DataList.