DataBinder.Eval方法研究

DataBinder.Eval方法研究DataBinder.Eval方法:用途:在运行时使用反射来分析和计算对象的数据绑定表达式重载列表如下:public static object Eval(object container,string expression);public static object Eval(object container,string expression,string forma

大家好,欢迎来到IT知识分享网。DataBinder.Eval方法:

用途:在运行时使用反射来分析和计算对象的数据绑定表达式

重载列表如下:

DataBinder.Eval方法研究
public
 
static
 
object
 Eval(
object
 container,
string
 expression);
DataBinder.Eval方法研究

public
 
static
 
object
 Eval(
object
 container,
string
 expression,
string
 format);
DataBinder.Eval方法研究

假设后台代码如下:

DataBinder.Eval方法研究
IList list 
=
 
new
 ArrayList();
DataBinder.Eval方法研究
DataBinder.Eval方法研究Task task 

=
 
new
 Task();
DataBinder.Eval方法研究
DataBinder.Eval方法研究task.Title 

=
 

title1

;
DataBinder.Eval方法研究
DataBinder.Eval方法研究task.StartDate 

=
 DateTime.Now;
DataBinder.Eval方法研究
DataBinder.Eval方法研究list.Add(task);
DataBinder.Eval方法研究
DataBinder.Eval方法研究task 

=
 
new
 Task();
DataBinder.Eval方法研究
DataBinder.Eval方法研究task.Title 

=
 

title2

;
DataBinder.Eval方法研究
DataBinder.Eval方法研究task.StartDate 

=
 DateTime.Now.AddDays(
1
);
DataBinder.Eval方法研究
DataBinder.Eval方法研究list.Add(task); 
DataBinder.Eval方法研究
DataBinder.Eval方法研究task 

=
 
new
 Task();
DataBinder.Eval方法研究
DataBinder.Eval方法研究task.Title 

=
 

title3

;
DataBinder.Eval方法研究
DataBinder.Eval方法研究task.StartDate 

=
 DateTime.Now.AddDays(
2
);
DataBinder.Eval方法研究
DataBinder.Eval方法研究list.Add(task); 
DataBinder.Eval方法研究
DataBinder.Eval方法研究

this
.DataGrid1.DataSource 
=
 list;
DataBinder.Eval方法研究
DataBinder.Eval方法研究

this
.DataGrid1.DataBind();
DataBinder.Eval方法研究
DataBinder.Eval方法研究

那么,常用的方式如下:

DataBinder.Eval方法研究
<
asp:datagrid 
runat
=server 
id
=”DataGrid1”
>

DataBinder.Eval方法研究
DataBinder.Eval方法研究

<
Columns
>

DataBinder.Eval方法研究
DataBinder.Eval方法研究

<
asp:TemplateColumn 
HeaderText
=”开始日期”
>

DataBinder.Eval方法研究
DataBinder.Eval方法研究  

<
ItemTemplate
>
     
DataBinder.Eval方法研究DataBinder.Eval方法研究    

<%
DataBinder.Eval方法研究
#DataBinder.Eval(Container.DataItem,StartDate,{0,d})
%>

DataBinder.Eval方法研究  

</
ItemTemplate
>

DataBinder.Eval方法研究
DataBinder.Eval方法研究

</
asp:TemplateColumn
>

DataBinder.Eval方法研究
DataBinder.Eval方法研究

</
Columns
>

DataBinder.Eval方法研究
DataBinder.Eval方法研究

</
asp:datagrid
>

DataBinder.Eval方法研究

分析:

1.第一个参数传进去的是Container.DataItem,那么看一下Container.DataItem是什么东西:
新增一列,如下:

DataBinder.Eval方法研究
<
asp:TemplateColumn 
HeaderText
=”test”
>

DataBinder.Eval方法研究

<
ItemTemplate
>

DataBinder.Eval方法研究DataBinder.Eval方法研究

<%
DataBinder.Eval方法研究
#Container.DataItem
%>

DataBinder.Eval方法研究

</
ItemTemplate
>

DataBinder.Eval方法研究

</
asp:TemplateColumn
>

DataBinder.Eval方法研究

运行结果如下图:
DataBinder.Eval方法研究

所以,此时的Container.DataItem是Task类型的对象,所以可以直接把Task的属性名作为DataBinder.Eval的第二个参数。
2.再看一下Container是什么东西:
把分析1中的代码的变成下面的样子:
<%#Container %>
运行结果如下图:
DataBinder.Eval方法研究

所以,这里的Container是一个DataGridItem的对象。接着看看Container和DataItem有什么关系:

DataGridItem类有一个属性就叫做DataItem,msdn中的解释为“获取或设置由 DataGrid 控件中的 DataGridItem 对象表示的数据项。”也就是说是数据源中的每一条,也就是列表list中的每一条(Task对象)。

所以,对于DataBinder.Eval(Container.DataItem,”StartDate”),参数Container.DataItem确定了将从某一个Task对象里取数据,StartDate指定了待取数据的访问路径。所以,这句话这么写也是OK的,DataBinder.Eval(Container,” DataItem.StartDate”),即Container指定了将从一个DataGridItem里取数据,数据的访问路径是DataItem.StartDate。

 

在msdn上没有找到Container的解释,把<%#Container %>放到DataGrid的TemplateColumn里,得到的是DataGridItem,把<%#Container %>放到一个table下面,得到是ASP.TaskList_aspx,所以猜测通过Container,可以引用到当前控件所在的容器(解释的不够准确)

 

3.那么,DataBinder.Eval的第一个参数不用Container可不可以呢?是可以的:

<%#DataBinder.Eval(PageTitle,”Text”)%>,假设PageTitle是一个Label,那么这句话就绑定到了PageTitle的Text属性。

结论:

说了这么多,对于所关心的如下结构的数据源怎样通过DataBinder.Eval来绑定呢?

DataBinder.Eval方法研究

假设数据源如下:

 

DataBinder.Eval方法研究
IList list 
=
 
new
 ArrayList();
DataBinder.Eval方法研究
DataBinder.Eval方法研究Task task 

=
 
new
 Task();
DataBinder.Eval方法研究
DataBinder.Eval方法研究

object
[] arr 
=
 
new
 
object
[
3
];
DataBinder.Eval方法研究
DataBinder.Eval方法研究task.Title 

=
 

title1

;
DataBinder.Eval方法研究
DataBinder.Eval方法研究task.StartDate 

=
 DateTime.Now;
DataBinder.Eval方法研究
DataBinder.Eval方法研究arr[

0

=
 

nihao

;
DataBinder.Eval方法研究
DataBinder.Eval方法研究arr[

1

=
 task;
DataBinder.Eval方法研究
DataBinder.Eval方法研究arr[

2

=
 

wohao

;
DataBinder.Eval方法研究
DataBinder.Eval方法研究list.Add(arr); 
DataBinder.Eval方法研究
DataBinder.Eval方法研究task 

=
 
new
 Task();
DataBinder.Eval方法研究
DataBinder.Eval方法研究task.Title 

=
 

title2

;
DataBinder.Eval方法研究
DataBinder.Eval方法研究task.StartDate 

=
 DateTime.Now.AddDays(
1
);
DataBinder.Eval方法研究
DataBinder.Eval方法研究arr 

=
 
new
 
object
[[
3
]];
DataBinder.Eval方法研究
DataBinder.Eval方法研究arr[

0

=
 

nihao

;
DataBinder.Eval方法研究
DataBinder.Eval方法研究arr[

1

=
 task;
DataBinder.Eval方法研究
DataBinder.Eval方法研究arr[

2

=
 

wohao

;
DataBinder.Eval方法研究
DataBinder.Eval方法研究list.Add(arr);
DataBinder.Eval方法研究
DataBinder.Eval方法研究task 

=
 
new
 Task();
DataBinder.Eval方法研究
DataBinder.Eval方法研究task.Title 

=
 

title3

;
DataBinder.Eval方法研究
DataBinder.Eval方法研究task.StartDate 

=
 DateTime.Now.AddDays(
2
);
DataBinder.Eval方法研究
DataBinder.Eval方法研究arr 

=
 
new
 
object
[
3
];
DataBinder.Eval方法研究
DataBinder.Eval方法研究arr[

0

=
 

nihao

;
DataBinder.Eval方法研究
DataBinder.Eval方法研究arr[

1

=
 task;
DataBinder.Eval方法研究
DataBinder.Eval方法研究arr[

2

=
 

wohao

;
DataBinder.Eval方法研究
DataBinder.Eval方法研究list.Add(arr);
DataBinder.Eval方法研究
DataBinder.Eval方法研究

this
.DataGrid1.DataSource 
=
 list;
DataBinder.Eval方法研究
DataBinder.Eval方法研究

this
.Page.DataBind();
DataBinder.Eval方法研究

那么可以用下面的方法绑定到StartDate

DataBinder.Eval方法研究
DataBinder.Eval方法研究
<%
DataBinder.Eval方法研究
#DataBinder.Eval(Container,DataItem.[1].StartDate,{0:d})
%>

所以,当我们再需要用反射去获得对象的某个属性值的时候,不需要再如下写代码了:

DataBinder.Eval方法研究
public
 
object
 GetPropertyValue(
object
 obj,
string
 propertyName)
DataBinder.Eval方法研究DataBinder.Eval方法研究

DataBinder.Eval方法研究
{

DataBinder.Eval方法研究    Type t 
= obj.GetType();
DataBinder.Eval方法研究    PropertyInfo info 
= t.GetProperty(propertyName);
DataBinder.Eval方法研究    
return info.GetValue(obj,null);
DataBinder.Eval方法研究}


DataBinder.Eval方法研究

上面这样写虽然可以达到效果,但是麻烦,而且对于处理person.Contact.Address这种属性比较麻烦。可以用DataBinder.Eval如下写:

DataBinder.Eval方法研究
public
 
object
 GetPropertyValue(
object
 obj,
string
 propertyName)
DataBinder.Eval方法研究DataBinder.Eval方法研究

DataBinder.Eval方法研究
{

DataBinder.Eval方法研究    
return DataBinder.Eval(obj,propertyName);
DataBinder.Eval方法研究}


免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/9905.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信