在将数据源绑定到页面控件 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"] %>
在效率上更好的方法是这样 :
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"] %>