• ASP.NET关于Container dataitem 与 eval方法介绍(转帖)


    Container是一个数据容器,代表集合类或者dataview中的一行,而Container。dataitem代表该行的数据;所有的container   被存放在是一个栈堆stack中,自动的将每一个container压入栈堆内,最后一行记录先进栈,最后是第一行;(或者说栈顶是集合类的第一个container)

    GridView的每一行都是一个类型为GridViewRow的Container(容器)对象。GridViewRow有一个属性叫DataItem,它是GridViewRow对象绑定到的基础数据对象,一般来说它就是绑定到GridView的关系数据库数据源的一行(DataRow)。


    在上面的例子中,因为GridViewRow(即GridView的一行)通过原先的数据绑定已经绑定到了一个ItemInformation对象,所以Container.DataItem可以转换为temInformation。
    总之,Container是GridView的一行,而Container.DataItem是这一行所绑定的数据。

    每个DataItem代表集合类内的一个对象,或者dataview内的一行记录(datarowview);

    此外Eval(object,string)方法,是通过反射机制在object内寻找string的,所以对于性能有些许损耗。

    Eval(container。dataitem,“name”):表示在当前的dataitem对象内寻找 name的值

    在使用Repeater的时候,会使用Container.DataItem.其实DataItem就是一个Object,这个Object就是Repeater的DataSource中的一个元素。

    如果 DataSourc是DataTable 那么这个DataItem就是DataRow

    如果DataSource是List<Article> 那么这个DataItem就是Article。这里Article是一个自定义的类。可以先做类型转换 然后调用Article的方法。比用DataBinder.Eval效率高一些,因为DataBinder.Eval需要使用反射。

    使用数据绑定的范例:

    绑定到简单属性:<%#UserName%>
              绑定到集合:<asp:ListBox id="ListBox1" datasource='<%# myArray%>' runat="server">
              绑定到表达式:<%#(class1.property1.ToString() + "," + class1.property2.ToString())%>
              绑定到方法返回值:<%# GetSafestring(str) %>
              绑定到Hashtable:<%# ((DictionaryEntry)Container.DataItem).Key%>
              绑定到ArrayList:<%#Container.DataItem %>

              若数组里里放的是对象则可能要进行必要的转换后再绑定如:
              <%#((对象类型)Container.DataItem).属性%>

              绑定到DataView,DataTable,DataSet:
              <%#((DataRowView)Container.DataItem)["字段名"]%>或
              <%#((DataRowView)Container.DataItem).Rows[0]["字段名"]%>
              要格式化则:
              <%#string.Format("格式",((DataRowView)Container.DataItem)["字段名"])%>
              <%#DataBinder.Eval(Container.DataItem,"字段名","格式")%>

              绑定到DataReader:
              <%#((IDataReader)Container.DataItem).字段名%>

  • 相关阅读:
    sql 主键 标识 默认值
    SQL Server跨服务器查询
    C# 取整数
    RegisterClientScriptBlock、RegisterStartupScript
    UpdatePanel
    C#创建(从数据库中导出)Excel文件(含Interop.Excel.Dll)
    基类、接口的应用——表单控件:一次添加、修改一条记录,一次修改多条记录。(上)
    利用JS获取IE客户端IP及MAC的实现
    Net用DataTable导出Excel通用函数(修正了Excel进程删除不掉问题)
    感人至深的文章
  • 原文地址:https://www.cnblogs.com/shysky77/p/2283523.html
Copyright © 2020-2023  润新知