zoukankan      html  css  js  c++  java
  • asp.net的eval,bind,container.dateitem,数据绑定的研究

    首先,eval与bind是两个方法,都可以实现前台数据绑定
    Bind方法(双向数据绑定)即能把数据绑定到控件,又能把数据变更提交到数据库。
    Eval方法(单向数据绑定)它实现了数据读取的自动化,并能对绑定字段进行格式化显示,但是没有实现数据写入自动化。

    比如,当有GridView、DetailsView控件的时候,Bind方法可以使控件从模板中的子控件中提取值,并将这些值传递给数据源控件。然后数据源控件将执行适当的数据库命令。所以在数据绑定控件的EditItemTemplate或InsertItemTemplate中要使用Bind函数。

    其次,在进行数据绑定的时候,可以用DataBinder.Eval或者直接用Container.DataItem

    DataBinder.Eval(Container.DataItem, "字段")
    DataBinder.Eval(Container, "DataItem.字段")

    /********************************************/

    ((对象类型)Container.DataItem).属性
    如果是GridView,Repeat,DataList等
    就是((DataRowView)Container.DataItem).Row["字段名"]
    如果是SqlDataReader
    就是((DbDataRecord)Container.DataItem)["字段名"]


    下面就来看看这两种数据绑定的区别
    Eval是通过反射的方式来获取值,而Container则是ASP.NET页面编译器在数据绑定事件处理程序内部声明的局部变量,里面存有值。

    这样看来,用Container效率应该比较高,但是有一网友做了一组这样的测试
    1.<@% DataBinder.Eval(Container.DataItem, "ColumnName") %>
    2.<@% DataBinder.Eval(Container.DataItem, "ColumnName", null) %>
    3.<@% DataBinder.Eval(Container, "DataItem.ColumnName", null) %>
    4.<@% ((DataRowView)Container.DataItem)["ColumnName"] %>
    5.<@% ((DataRowView)Container.DataItem).Row["ColumnName"] %>

    来看哪个效率高,得出的结论是前三种由于用了反射,所以效率不高,但是第四种在某些情况下效率更低,第五种是一种比较合适的写法

    参考的文章:
    数据绑定以及Container.DataItem的具体分析
    http://space.itpub.net/12639172/viewspace-481782
    Eval 和 Bind 方法的区别
    http://www.cnblogs.com/dupeng0811/archive/2009/03/23/1419600.html
    数据绑定以及Container.DataItem几种方式与用法分析
    http://www.diybl.com/course/4_webprogram/asp.net/netjs/200847/108607.html
    请问Bind ,Eval有说明区别?大家来讨论讨论
    http://faq.csdn.net/read/216609.html

  • 相关阅读:
    mysql通过data目录恢复数据库
    CentOS安装TortoiseSVN svn 客户端
    CentOS上安装Node.js
    PHP--进行模块化设计
    PHP开发绝对不能违背的安全铁则
    达内培训:php在线端口扫描器
    使用 PHP 限制下载速度
    使用无限生命期Session的方法
    使用php作linux自动执行脚本
    腾讯星座运势api
  • 原文地址:https://www.cnblogs.com/ljzforever/p/1467793.html
Copyright © 2011-2022 走看看