在将数据源绑定到页面控件 Repeater or DataGrid 上时通常我们这样绑定 <%#  DataBinder.Eval(Container.DataItem,"ColumnName")%>  
在效率上更好的方法是这样 :
1. 以DataReader 为数据源 <%# ((IDataRecord)Container.DataItem)["ColumnName"] %>
2. 以DataSet or DataTable 为数据源 <%# ((DataRowView)Container.DataItem)["ColumnName"]%>
使用以上方法需在页面里添加 <%@ Import namespace="System.Data"%>

DataGrid自动创建列的时候不是用DataBinder.Eval的
DataGrid的数据源如果是DataSet or DataTable,则DataGrid会自动找所绑定的DataTable的DefaultView,也就是DataView对象   
DataView实现了接口:ITypedList  ,实现了这个接口的DataView可以告诉DataGrid他的架构信息 
    
DataBinder.Eval只是能够给我们简化代码,并且是数据绑定表达式适应任何数据源的,在效率上,它可是非常差劲的,DataBinder.Eval方法竟然会找出DataTable所有的属性,然后再找找看有没有索引器,有索引器,再尝试反射调用索引器的get方法等

<%# ((IDataRecord)Container.DataItem)["ShipName"] %><%# ((IDataRecord)Container.DataItem)["ShipName"] %>
posted on 2007-01-13 21:13  空空儿  阅读(420)  评论(0编辑  收藏  举报