用DataBinder.eval 绑定不必关心数据来源(Dataread或dataset)。不必关心数据的类型eval会把这个数据对象转换为一个字符串。在底层绑定做了很多工作,使用了反射性能。正因为使用方便了,但却影响了数据性能。当于dataset绑定时,DataItem其实式一个DataRowView(如果绑定的是一个数据读取器(dataread)它就是一个IdataRecord。)因此直接转换成DataRowView的话,将会给性能带来很大提升。
使用时注意:1.注意字段名的大小写(要特别注意)。如果和查询的不一致,在某些情况下会导致比<%# DataBinder.Eval(Container.DataItem, "字段名") %>还要慢。2.如果想进一步提高速度,可采用<%# ((System.Data.DataRowView)Container.DataItem)[0] %>的方法。不过其可读性不高。
//
以DataSet做数据源时
//
正常情况(C#)
<%
# ((System.Data.DataRowView)Container.DataItem)[
"
Title
"
]
%>
//
绑定日期字段格式字符串
<%
# Convert.ToDateTime(((System.Data.DataRowView)Container.DataItem)
[
"
FbTime
"
]).ToString(
"
yyyy年MM月dd日
"
)
%>
<%
# DataBinder.Eval(Container,
"
DataItem.FbTime
"
,
"
{0:yyyy年MM月dd日}
"
)
%>
//
字符串绑定超过指定长度截断
<%
# DataBinder.Eval(Container.DataItem,
"
Text
"
).ToString().Trim().Length
>
7
?
DataBinder.Eval(Container.DataItem,
"
Text
"
).ToString().Trim().Substring
(
0
,
7
):DataBinder.Eval(Container.DataItem,
"
Text
"
).ToString().Trim()
%>
//
价格格试化为2位小数
<%
# Convert.ToDecimal(((System.Data.DataRowView)Container.DataItem) [
"
Price
"
]).ToString(
"
F2
"
)
%>
<%
# DataBinder.Eval(Container,
"
DataItem.Price
"
,
"
{0:F2}
"
)
%>
'
VB.net中价格格式化后判断
<
%#
IIf
(DataBinder.Eval(Container.DataItem,
"
price
"
,
"
{0:F2}
"
)
=
"
0.00
"
,
"
面
议
"
,DataBinder.Eval(Container.DataItem,
"
price
"
,
"
{
0
:F2}
"
)+
"
万
"
) %>
'
Vb.net常规
<
%#
Ctype
(Container.DataItem,DataRowView).Row(
"
Title
"
) %
>