如何将字段从数据源绑定到ListView控件?

| 我有一个ListView控件,我曾经使用ASP ObjectDataSource控件来填充它。这很好。 但是,我想实现一个过滤器,以在ListView中显示以字母A,B,C等开头的项目。为此,我删除了ObjectDataSource控件,并用Page_Load事件中的一些代码替换了它,从而使我可以更好地控制关于我作为数据源传入的内容,类似于以下内容:
System.Diagnostics.Debug.Print(\"{0:HH:mm:ss} : GET DATA\", DateTime.Now);
List<MyItem> items = GetItems(\"A\"); // Gets a list of items with a description that 
                                    // begins with A
MyListView.Datasource = items;
System.Diagnostics.Debug.Print(\"{0:HH:mm:ss} : BIND DATA\", DateTime.Now);
MyListView.DataBind();
System.Diagnostics.Debug.Print(\"{0:HH:mm:ss} : DONE\", DateTime.Now);
输出(时间代表实际结果):
16:00:00 : GET DATA
16:00:00 : BIND DATA
16:00:20 : DONE
由于这样做,大约需要20秒才能在浏览器中加载页面,而不是在使用ObjectDataSource时花费大约1秒的时间。 要将数据加载到ListView行中,我使用标准的
<%# Eval(\"Description\") %>
方法。在SO和google上搜索后,有人似乎说
Eval
效率低下。 为什么在Page_Load事件中手动绑定会减慢一切速度?是因为Eval效率低下吗?我如何加快速度?正确的方法是什么?     
已邀请:
在我看来,问题极不可能是Eval语句,或者您在页面加载中进行数据绑定的事实,除非您返回非常大的列表。评估速度可能较慢,但不如您看到的那样快。可能还有另一个原因。 我会仔细检查GetItems()函数。选择代码更有可能比它的效率低一些。 其他要检查的东西... 检查Eval正在调用的属性。他们还能做些什么,只是返回一个字符串? Eval将运行那些属性/方法中的任何代码,因此请确保它们尽可能快。     
您的数据库中有多少条记录?您是否启用了分页?如果是这样,则问题可能出在ObjectDataSource使用一种更有效的方法来仅检索打算显示的对象数量,而您对GetItems()的调用将返回所有内容,即使未显示该对象也是如此。鉴于返回时间的巨大差异,这是我对正在发生的事情的猜测。 如果发生这种情况,可以通过限制返回的记录数来加快速度。这将取决于您对GetItems()的实现。您想要编写类似GetItemsPaged(int firstRecord,int pageLength)这样的东西,它仅返回有限的数据量。     

要回复问题请先登录注册