zoukankan      html  css  js  c++  java
  • 关于asp.net的绑定DataBinder.Eval()和Eval()的区别的个人新理解

    第一次写博客,是个人意见,请各位大牛看到,指出错误之处!

    首先说一说:DataBinder.Eval()的两种形式

      一)DataBinder.Eval(Container,"") :第一个是对数据源控件本身行的操作,比如:DataBinder.Eval(Container,"ItemIndex")获取当前是第几行,用来做自动排序很方便.

         二)DataBinder.Eval(Container.DataItem,""):第二个是对数据源的行的操作,比如:DataBinder.Eval(Container.DataItem,"Name")这个获取的是绑定本行数据字段是Name的值.

      这就可以说,如果你想获取控件本身的属性,使用第一种形式;如果是对数据源的值,使用第二种形式.

      说到这,那么Eval()也这有什么联系和区别呢?

    然后说说区别:

      个人理解是这样的,Eval()其实等同于DataBinder.Eval()的第二种形式:Eval()==DataBinder.Eval(Container.DataItem,""),是对数据源的操作.这下就很好理解了!

    想到DataItem这个属性,大家一定想到ItemDataBound事件中常用的一个数据转换方式:

      DataRowView row=(DataRowView)e.Item.DataItem;这句话用来获取绑定一行的所有数据,然后获取单个字段数据来做显示转换或其它的用处.

      个人理解记忆就是,DataBinder.Eval()方法中的Container与e.Item有异曲同工之妙.Container==e.Item;现在就很好理解DataBinder.Eval()和简化的Eval()的区别的吧.Eval()是          DataBinder.Eval()的一个子集,子集就是DataBinder.Eval(Container.DataItem,"")

    到这,大家也许就会有个问题,既然这种形式DataBinder.Eval(Container,"")本身是对控件的行的解析,那么也包含对数据行的绑定吧.是的,如果你一定要使用DataBinder.Eval(Container,"")来做对数据行的操作,可以这样写:DataBinder.Eval(Container,"DataItem.Name"),这样就达到了与第二种形式一样的效果.

    同时,这些前台代码用cs文件中的代码解析后,更好理解和记忆,让初学者能理解记忆深刻!

       解析代码:DataBinder.Eval(Container,"DataItem.Name")=={

        DataRowView row=(DataRowView)e.Item.DataItem;//获取当前行需要绑定的所有数据

        this.LblName=row["Name"].ToString();  //这里使用模版列中的Label来显示数据}

    当然,DataBinder.Eval()还有多种用法,这里取的是一种效率比较快的方法.其它方法暂不讨论.

  • 相关阅读:
    5 浏览器跨域问题
    4 html文件引用问题
    3 Oracle 32位客户端安装及arcgis连接
    2 虚拟机Oracle11.2.0.4服务器端,第三方图形化界面安装步骤
    1 主机WiFi连接下与虚拟机通信问题
    数列分块入门 3 题解
    数列分块入门 2 题解
    SDOI2009 HH的项链 题解
    数列分块入门 1 题解
    [SHOI2002]空中都市 题解
  • 原文地址:https://www.cnblogs.com/tangyan/p/2742450.html
Copyright © 2011-2022 走看看