积分不够,无法下载资源,请看这里! 争做班主任,享特权 ! 如何在本论坛上传大文件? 有好源码,想换点钱,来这里!
1/1页1 跳转到查看:223
发新话题 回复该主题

新手求救:DataBinder.Eval

新手求救:DataBinder.Eval

谁知道关于DataBinder.Eval 方法的详细资料?

TOP

 

回复: 新手求救:DataBinder.Eval

我帮你找了些相关资料,你看看对你是否有用。
我这么雷锋的举动,是不是奖励我一些金币啊?

DataBinder.Eval(Container.DataItem,"")可以绑定出数据,
但是在实践过程中用Eval("")也能正常显示

Eval数据绑定语法,只在数据绑定上下文中可用.
DataBinder可以在后台编码中使用.
在运行时,Eval 方法调用 DataBinder 对象的 Eval 方法,同时引用命名容器的当前数据项。
都是在后台运行,前者只是提供了一个asp式的简洁语法,没有很大区别.

DataBinder.Eval 和Bind。出现在asp.net页面中的<%# %>里。我只知道他们都是绑定数据用的
问题1、他们是有什么不同?
问题2、他们是否可以相互替换?
问题3、DataBinder.Eval(Container.DataItem,"") 这个Container和DataItem分别都是什么?

答1:Eval是对数据的只读绑定,被绑定的子控件所属的父控件(比如GridView)不能用此子控件接收用户输入的修改。Bind是双向绑定,所谓双向,是数据源---显示界面的双向数据流动,即读/写。
答2:Eval可以替换为Bind,但会降低性能;反之不能替换。
答3:Container即容器,指父控件;DataItem指父控件所绑定的数据源的当前行,不是字段。

Eval 单向绑定:数据是只读的
Bind 双向绑定:数据可以更改,并返回服务器端,服务器可以处理更改后的数据,如存入数据库.

1.DataBinder.Eval用法
//显示二位小数
<%# DataBinder.Eval(Container.DataItem, "UnitPrice", "${0:F2}") %>

//{0:G}代表显示True或False
<ItemTemplate>
<asp:Image Width="12" Height="12" Border="0" runat="server"
AlternateText="<%# DataBinder.Eval(Container.DataItem,

"Discontinued", "{0:G}") %>"
ImageUrl="<%# DataBinder.Eval(Container.DataItem,

"Discontinued", "~/images/{0:G}.gif") %>" />
</ItemTemplate>

//转换类型
((string)DataBinder.Eval(Container, "DataItem.P_SHIP_TIME_SBM8")).Substring

(4,4)

{0:d} 日期只显示年月日
{0:yyyy-mm-dd} 按格式显示年月日
{0:c} 货币样式


2.Container.DataItem用法.
在绑定数据时经常会用到这个句程序:<%# DataBinder.Eval

(Container.DataItem,"xxxx")%>或者<%# DataBinder.Eval

(Container,"DataItem.xxxx")%>

还有一种,而且微软也说这种方法的效率要比以上两种高。

<%# ((DataRowView)Container.DataItem)["xxxx"]%>

很有用的,这样可以在前台页面做好多事情了。

还要记住要这样用必须要在前台页面导入名称空间System.Data,否则会生成错误信息。

<%@ Import namespace="System.Data" %>

这种用法其实和<%# ((DictionaryEntry)Container.DataItem).Key%>是一个道理。

关键是Container这个东西,它的名称空间是System.ComponentModel。


3.DataBinder.Eval和Container.DataItem的区别

DataBinder.Eval(Container.DataItem,"Name")和Container.DataItem("Name")有什么区别?
DataBinder是System.Web里面的一个静态类,它提供了Eval方法用于简化数据绑定表达式的编写,但是它使用的方式是通过Reflection等开销比较大的方法来达到易用性,因此其性能并不是最好的。而Container则根本不是任何一个静态的对象或方法,它是ASP.NET页面编译器在数据绑定事件处理程序内部声明的局部变量,其类型是可以进行数据绑定的控件的数据容器类型(如在Repeater内部的数据绑定容器叫RepeaterItem),在这些容器类中基本都有DataItem属性,因此你可以写Container.DataItem,这个属性返回的是你正在被绑定的数据源中的那个数据项。如果你的数据源是DataTable,则这个数据项的类型实际是DataRowView。

最后:Container是你要绑定数据的容器控件,而DataItem是绑定数据到控件的数据源的字段!

TOP

 

DataBinder.Eval总结

一、DataBinder.Eval的基本格式
在绑定数据时经常会用到这个句程序:
<%# DataBinder.Eval(Container.DataItem,"xxxx")%>
或者
<%# DataBinder.Eval(Container,"DataItem.xxxx")%>

今天又学到一种,而且微软也说这种方法的效率要比以上两种高。
<%# ((DataRowView)Container.DataItem)["xxxx"]%>

很有用的,这样可以在前台页面做好多事情了。
还要记住要这样用必须要在前台页面导入名称空间System.Data,否则会生成错误信息。
<%@ Import namespace="System.Data" %>
这种用法其实和<%# ((DictionaryEntry)Container.DataItem).Key%>是一个道理。
Text='<%# DataBinder.Eval(Container.DataItem, "字段") %>'  这样的方法是最快的

Text='<%# GetPrice() %>'  也可以绑定方法,但方法要是public的

Text='<%# "CarDetails.aspx?CarID=" + DataBinder.Eval(Container.DataItem, "CarID") %>'

还可以连接多个字段

关键是Container这个东西,它比较神秘。它的名称空间是System.ComponentModel。对于它我还需要进一步理解。
二、DataBinder.Eval实现判断选择
<asp:TemplateColumn HeaderText="性别">
<ItemTemplate>
<%# DGFormatSex(Convert.ToString(DataBinder.Eval(Container.DataItem,"xb"))) %>
</ItemTemplate>
</asp:TemplateColumn>

cs里定义DGFormatSex方法
protected string DGFormatSex(string xb)
{
  if(xb == "1")
  return "男";
  else
  return "女";
}

DataBinder.Eval用法范例

//显示二位小数
//<%# DataBinder.Eval(Container.DataItem, "UnitPrice", "${0:F2}") %>

//{0:G}代表显示True或False
//<ItemTemplate>
// <asp:Image Width="12" Height="12" Border="0" runat="server"
// AlternateText='<%# DataBinder.Eval(Container.DataItem, "Discontinued", "{0:G}") %>'
// ImageUrl='<%# DataBinder.Eval(Container.DataItem, "Discontinued", "~/images/{0:G}.gif") %>' />
// </ItemTemplate>

//转换类型
((string)DataBinder.Eval(Container, "DataItem.P_SHIP_TIME_SBM8")).Substring(4,4)

{0:d} 日期只显示年月日
{0:yyyy-mm-dd} 按格式显示年月日
{0:c} 货币样式



TOP

 

回复: 新手求救:DataBinder.Eval

解释得蛮详细的,复习了。。很好。。呵呵。。。

TOP

 
1/1页1 跳转到
发表新主题 回复该主题