DataBinder.Eval方法研究

转载 2006年06月15日 15:44:00

DataBinder.Eval方法:

 

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

重载列表如下:

public static object Eval(object container,string expression);

public static object Eval(object container,string expression,string format);

 

假设后台代码如下:

IList list = new ArrayList();

Task task = new Task();

task.Title = "title1";

task.StartDate = DateTime.Now;

list.Add(task);

 

task = new Task();

task.Title = "title2";

task.StartDate = DateTime.Now.AddDays(1);

list.Add(task);

 

task = new Task();

task.Title = "title3";

task.StartDate = DateTime.Now.AddDays(2);

list.Add(task);

 

this.DataGrid1.DataSource = task;

this.Page.DataBind();

那么,常用的方式如下:

<asp:datagrid runat=server id=”DataGrid1”>

<Columns>

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

<ItemTemplate>                                                                                                                     <%#DataBinder.Eval(Container.DataItem,"StartDate","{0,d}")%>

       </ItemTemplate>

</asp:TemplateColumn>

</Columns>

</asp:datagrid>

 


分析:

 

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

新增一列,如下:

<asp:TemplateColumn HeaderText="test">

<ItemTemplate>

<%#Container.DataItem%>                                                                        

</ItemTemplate>

</asp:TemplateColumn>

运行结果如下图:

所以,此时的Container.DataItemTask类型的对象,所以可以直接把Task的属性名作为DataBinder.Eval的第二个参数。

2.再看一下Container是什么东西:

把分析1中的代码的红色部分变成下面的样子:

<%#Container %>

运行结果如下图:

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

DataGridItem类有一个属性就叫做DataItemmsdn中的解释为“获取或设置由 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 %>放到DataGridTemplateColumn里,得到的是DataGridItem,把<%#Container %>放到一个table下面,得到是ASP.TaskList_aspx,所以猜测通过Container,可以引用到当前控件所在的容器(解释的不够准确)

 

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

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

结论:

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

 

假设数据源如下:

IList list = new ArrayList();

              Task task = new Task();

              object[] arr = new object[3];

              task.Title = "title1";

              task.StartDate = DateTime.Now;

              arr[0] = "nihao";

              arr[1] = task;

              arr[2] = "wohao";

              list.Add(arr);

 

              task = new Task();

              task.Title = "title2";

              task.StartDate = DateTime.Now.AddDays(1);

              arr = new object[3];

              arr[0] = "nihao";

              arr[1] = task;

              arr[2] = "wohao";

              list.Add(arr);

 

              task = new Task();

              task.Title = "title3";

              task.StartDate = DateTime.Now.AddDays(2);

              arr = new object[3];

              arr[0] = "nihao";

              arr[1] = task;

              arr[2] = "wohao";

              list.Add(arr);

 

              this.DataGrid1.DataSource = list;

              this.Page.DataBind();

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

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

DataBinder.Eval方法研究 收藏

DataBinder.Eval方法研究 DataBinder.Eval方法: 用途:在运行时使用反射来分析和计算对象的数据绑定表达式 重载列表如下: public static object Eval...
  • masky5310
  • masky5310
  • 2009年07月17日 00:27
  • 1040

DataBinder.Eval方法研究

DataBinder.Eval方法: 用途:在运行时使用反射来分析和计算对象的数据绑定表达式 重载列表如下: public static object Eval(object cont...
  • crazyliyang
  • crazyliyang
  • 2014年06月18日 14:28
  • 772

DataBinder.Eval(Container.DataItem

1.DataBinder.Eval用法 //显示二位小数 //{0:G}代表显示True或False
  • shuo785869451
  • shuo785869451
  • 2013年11月29日 17:28
  • 734

数据绑定DataBinder.Eval使用总结

一、DataBinder.Eval的基本格式在绑定数据时经常会用到这个句程序:或者今天又学到一种,而且微软也说这种方法的效率要比以上两种高。很有用的,这样可以在前台页面做好多事情了。还要记住要这样用必...
  • lydit888
  • lydit888
  • 2007年10月16日 13:41
  • 431

Bind()、Eval()、DataBinder.Eval()区别

一、Bind() 格式: 说明: Bind()是可更新的,是Bind绑定列可编辑,并且可以和数据源控件交互,直接和数据库交互,但是用Bind的话,无法对字段使用格式化方法; 二、Eval(...
  • debugingstudy
  • debugingstudy
  • 2012年10月07日 00:01
  • 828

DataBinder.Eval(Container.DataItem,"xxxx")的使用

今天遇到用老是无法取到动态值得问题。后来才发现原来是格式的问题,同时也反映出自己对这个用法还不了解在一长串字符的某些字段是动态值得时候,应该使用如下的格式:开来还是要对DataBinder.Eval(...
  • steven_chr
  • steven_chr
  • 2006年06月20日 17:13
  • 1441

DataBinder.Eval和Container.DataItem(DataRowView)有什么区别

 DataGrid控件,在ItemTemplate显示数据时, DataBinder.eval_r(Container.DataItem,"Name")和Container.DataItem(...
  • yin554393109
  • yin554393109
  • 2015年07月30日 10:18
  • 367

DataBinder.Eval方法

Text=这样的方法是最快的Text=也可以绑定方法,但方法要是public的Text=还可以连接多个字段 ...
  • daban123
  • daban123
  • 2004年06月25日 14:27
  • 1074

与'>以及DataBinder.Eval(Container, DataItem,"id")的区别

直接用Eval()方式是利用了反射机制,而在ASP.NET 1.0中,只能使用DataBinder.Eval()的方式。 是只读的方式访问数据 是以读写的方式 DataBinder.Eval(Cont...
  • nanyida0416sushe
  • nanyida0416sushe
  • 2010年05月17日 11:38
  • 2641

做课题与科研项目常用的研究方法

研究方法不出“硬伤” 1、常用的研究方法有文献研究法、教育观察法、经验总结法、个案研究法、行动研究法、实验研究法、历史研究法、调查研究法、比较研究法、叙事研究法等。 2、研究类型或途径、或...
  • neilol
  • neilol
  • 2015年06月18日 15:28
  • 3231
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DataBinder.Eval方法研究
举报原因:
原因补充:

(最多只允许输入30个字)