DataItem,gridview,repeater数据控件数据绑定
2015-11-13 17:24
387 查看
Container.DataItem几种方式.
在绑定数据时经常会用到这个句程序:<%# DataBinder.Eval(Container.DataItem,"xxxx")%>或者<%# DataBinder.Eval(Container,"DataItem.xxxx")%>今天又学到一种,而且微软也说这种方法的效率要比以上两种高。
<%# ((DataRowView)Container.DataItem)["xxxx"]%>
很有用的,这样可以在前台页面做好多事情了。
还要记住要这样用必须要在前台页面导入名称空间System.Data,否则会生成错误信息。
<%@ Import namespace="System.Data" %>
这种用法其实和
<%# ((UserInfoModel)Container.DataItem).Key%>
<%# ((DictionaryEntry)Container.DataItem).Key%>
是一个道理。
关键是Container这个东西,它比较神秘。它的名称空间是System.ComponentModel。对于它我还需要进一步理解。
来源:http://www.cnblogs.com/huabei504/archive/2005/03/01/110618.html
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).字段名%>
来自: http://hi.baidu.com/jiangyangw3r/blog/item/d8d27b3100a23210eac4af76.html
相关文章推荐
- 使用友盟分享,出现linker command failed with exit code 1
- Doing Homework again
- Naive Bayes(朴素贝叶斯算法)[分类算法]
- faster rcnn test demo ---repaired for video input and save the image, label, score et al. into .mat format
- 模拟器报Installation error: INSTALL_FAILED_CONTAINER_ERROR解决方法
- ArcMap 发布服务,提示package failure
- struct2源码解读(8)之container原理
- 杭电1039 Easier Done Than Said?
- PTHREAD_MUTEX_INITIALIZER http://blog.csdn.net/yasi_xi/article/details/19197203
- light oj 1138 - Trailing Zeroes (III)【规律&&二分】
- Retain特质属性在MRC中的陷阱以及ARC中对其的规避
- Air中添加命令行参数的方法
- 使用mailto在网页中链接Email地址
- CodeTyphon32中自带例子源码:用内置的正则函数LSExtractStringUsingRegEx取得IP、email、Url
- XCode :failed to get the task for process XXX
- 关于pthread里面一些函数的使用心得! http://blog.csdn.net/lishuhuakai/article/details/12010229
- leetcode Contains Duplicate
- 移动止损(Trailing Stop)
- retain
- POSIX的pthread_join http://blog.csdn.net/ba_jie/article/details/6783205