三十格式化DataList和Repeater的数据Word文档格式.docx
- 文档编号:15909784
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:12
- 大小:204.93KB
三十格式化DataList和Repeater的数据Word文档格式.docx
《三十格式化DataList和Repeater的数据Word文档格式.docx》由会员分享,可在线阅读,更多相关《三十格式化DataList和Repeater的数据Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
本文主要介绍ASP.NET2.0使用DataList和Repeater如何呈现数据,一种是在控件的ItemDataBound事件中处理,一种则是在绑定数据时调用后台定义的方法来实现。
导言
在前面的教程里我们学习了DataList提供了一些风格样式的属性.而且我们还学习了如何定义HeadStyle,ItemStyle,AlternatingItemStyle,和SelectedItemStyle等属性的默认CSS.除了这四个属性外,DataList还提供了其它属性,比如Font,ForeColor,BackColor,和BorderWidth.而Repeater没有提供任何这样的属性.如果你需要用Reperter来实现这些效果,你就需要在templates里直接写标记语言.
通常,数据需要怎样的格式取决于数据本身.比如,我们可能使用灰色的字体列出那些被停止使用的product,或者在UnitsInStock等于0的时候显示高亮.前面的教程里我们已经学习了GridView,DetailsView,和FormView都提供了两种截然不同的格式化数据的方法.
DataBound事件—为DataBound事件创建一个合适的eventhandler,它在数据绑定到item的时候激发(对GridView来说是RowDataBound事件;
对DataList和Repeater来说是ItemDataBound事件).在这些事件里,刚刚绑定的数据可以被格式化.参见《基于数据的自定义格式化》这章.
Templates的格式化功能—在DetailsView或GridView里使用TemplateFields,或在FormView里使用template,我们可以在ASP.NETpage的code-behindclass里或者BLL里,或者任何其它web程序里可以调用的类库里加格式化信息.这种格式化功能可以接收任意的输入参数,但是在template里比如返回HTML.格式化功能最早在在GridView控件中使用TemplateField这章里谈到过.这两种方法都可以在DataList和Repeater里使用.在本章里我们将一步步用这两种方法在这两个控件里做示例.
使用ItemDataBoundEventHandler
当数据绑定到DataList时,无论是使用数据源控件或者直接在代码里使用DataSource和DataBind(),DataList的DataBinding事件都会被激发.
DataList为数据源的每条记录创建一个DataListItem对象,然后绑定到当前记录.在这个过程中DataList激发两个事件:
ItemCreated—在创建DataListItem后激发
ItemDataBound—当前记录绑定到DataListItem后激发
下面列出了DataList数据绑定过程的大概步骤
DataList的DataBindingevent被激发
DataList
对数据源的每条记录...
Foreachrecordinthedatasource…
创建一个DataListItem对象
激发ItemCreatedevent
绑定记录到DataListItem
激发ItemDataBoundevent
将DataListItem添加到Itemscollection
当数据绑定到Repeater时,和上面所说的情况一样.唯一的区别在于,DataListItem换成了RepeaterItem.
注意:
细心的读者可能注意到了DataList和Repeater绑定到数据时的步骤顺序和GridView有些许差别.在数据绑定过程的后期,GridView会激发DataBound事件,而DataList和Repeater则都没有这个事件.
和GridView一样,可以为ItemDataBound事件创建一个eventhandler来格式化数据.这个eventhandler可以处理刚刚绑定到DataListItem或RepeaterItem的数据,来按照需要进行格式化.
对DataList来说,可以使用风格样式相关的属性,如Font,ForeColor,BackColor,CssClass等,来格式化item.而如果你想格式化Datalist里的template里的web控件,你需要编程去获取这些控件,然后来控制.我们在《CustomFormattingBasedUponData》里已经看过怎样做.和Repeater控件一样,RepeaterItem类也没有风格样式相关的属性,因此,你需要在ItemDataBoundeventhandler里编程去实现.
由于在DataList和Repeater里使用ItemDataBound格式化技术从本质上来说是由于的,因此我们的示例主要讲DataList.
第一步:
在DataList显示Product
信息
在学习格式化之前,我们首先创建一个使用DataList显示product信息的页面.在前面一章里,我们创建了一个ItemTemplate显示product的name,category,supplier,quantity和price的DataList.我们在本章来重复做一次.你可以重新创建DataList和它的ObjectDataSource,或者直接把前面一章里的Basics.aspx里的控件复制到本章的页面(Formatting.aspx)里.当你完成了Formatting.aspx后,将DataList的ID从DataList1改为ItemDataBoundFormattingExample.下面,在浏览器里看看DataList.如图1所示,唯一的格式在于每个product的交替的背景色.
图1:
在DataList里列出product信息
在本章教程里,我们来将价格小于$20.00的product的名字和单价用黄色高亮来显示.
第二步:
在ItemDataBoundEventHandler里编程判断数据的值
由于只有价格低于$20.00的product会被格式化,因此我们首先要判断每个product的价格.在绑定数据到DataList时,DataList为每条数据源的记录创建一个DataListItem实例,并绑定数据.当记录绑定到DataListItem对象后,ItemDataBound事件被激发.我们可以为这个事件创建一个eventhandler来判断当前DataListItem的值,再根据这个值来格式化数据.
添加以下代码为DataList创建ItemDataBound事件
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protectedvoidItemDataBoundFormattingExample_ItemDataBound
(objectsender,DataListItemEventArgse)
{
if(e.Item.ItemType==ListItemType.Item||
e.Item.ItemType==ListItemType.AlternatingItem)
//ProgrammaticallyreferencetheProductsRowinstancebound
//tothisDataListItem
Northwind.ProductsRowproduct=
(Northwind.ProductsRow)((System.Data.DataRowView)e.Item.DataItem).Row;
//SeeiftheUnitPriceisnotNULLandlessthan$20.00
if(!
product.IsUnitPriceNull()&
&
product.UnitPrice<
20)
//TODO:
Highlighttheproduct'
snameandprice
}
DataList的ItemDataBoundeventhandler在概念和语义上来说,和GridView的RowDataBoundeventhandler一样(见基于数据的自定义格式化),语法上有一点差别.当ItemDataBound事件激发时,刚刚绑定数据的DataListItem通过e.Item(在GridView里是e.Row和RowDataBound)传递给相关的eventhandler.DataList的ItemDataBoundeventhandler影响到每一行,包括header,footer和separator.但是product信息只绑定到data行.因此,在处理ItemDataBound事件前,我们首先要判断处理的是否是data行.这个可以通过检查DataListItem的ItemType属性来完成,它可以有以下八个值:
AlternatingItem
EditItem
Footer
Header
Item
Pager
SelectedItem
Separator
Item和AlternatingItem都表示DataList的dataitem.假设我们在处理Item或AlternatingItem,我们可以获取绑定到当前DataListItem的ProductsRow的实例.DataListItem的DataItem属性包含了DataRowView对象的引用,通过它的Row属性可以获取ProductsRow对象.
下面我们来检查ProductsRow实例的单价属性.由于Product表的UnitPrice字段允许空值,所以在获取UnitPrice属性前我们应该先用IsUnitPriceNull()方法检查这个值是否为空.如果不是,我们再检查看它是否低于$20.00.如果是,我们就进行格式化处理.
第三步:
是Product的Name和Price高亮显示
一旦我们发现Product的price低于$20.00,我们将使它的name和price显示高亮.首先我们要编程获得ItemTemplate里显示Product的name和price的Label控件.然后我们将它的背景色显示为黄色.这个可以直接通过修改Label空间的BackColor属性(LabelID.BackColor=Color.Yellow).当然最理想的做法是所有的显示相关的行为都通过CSS来实现.实际上我们在基于数据的自定义格式化一章里创建的Styles.css-AffordablePriceEmphasis已经提供了这个功能.
使用以下代码设置两个Label控件的CssClass属性为AffordablePriceEmphasis来完成格式化:
//HighlighttheproductnameandunitpriceLabels
//First,getareferencetothetwoLa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 三十 格式化 DataList Repeater 数据