我的页面上有一个简单的asp FormView,它工作正常,但是我注意到页面加载有点慢(2-3秒),当时真的没有理由对于它来说,它是一个如此简单的页面。
问题是FormView正在使用一个SqlDataSource,它正在使用一个重的' select语句,基本上抓取配置文件表的所有字段和所有行(名称,地址,电话等)。我假设FormView需要获取所有记录,以便Paging正常工作,但有没有办法对它进行编码或我可以使用的属性,所以它不会抓住每一行和每列但只是所有的当前NameId的列?
ASP:
<asp:FormView ... DataSourceId="sdsNames" AllowPaging="True" DataKeyNames="NameId">
<EditItemTemplate>....</EditItemTemplate>
<InsertItemTemplate>...</InsertItemTemplate>
<ItemTemplate>
<asp:Label Text='<%# Eval("Name") %>'.../>
...
</ItemTemplate>
</asp:FormView>
<SqlDataSource ID="sdsNames" ... SelectCommand="SELECT * from tblNames">
我尝试将SelectCommand更改为
SELECT * from tblNames where NameId=1
因为初始页面应该显示第一个条目。但后来我失去了分页,基本上没办法查看下一个记录。
页面的样子:
答案 0 :(得分:1)
您无法在此处提高性能。你纠正了,SqlDataSource确实减慢了速度,因为它检索了你表中的所有行。
我想到了几种不同的方法:
从您的查询中删除字段。
这是最简单的解决方案,但它可能不适用于您的情况。如果您不需要显示/修改字段,请将其删除。因此,您需要SELECT * FROM...
SELECT LName, FName, Mname FROM...
您仍然可以获得每一行,但至少每行中的数据都较少。
您可以切换到ObjectDataSource控件。
我还没有多次使用这个控件but MSDN says that it performs a little better,因为它并不总是需要检索每一行:
某些数据源(如ObjectDataSource控件)提供的功能更多 高级寻呼功能。在这些情况下FormView控件 利用数据源的更高级功能 在分页时获得更好的性能和灵活性。的数量 请求的行可能因数据源是否支持而异 检索总行数。
您可以远离数据源控件。
这可能涉及比您正在寻找的更复杂,但它是最灵活的方法。您只能检索所需的列和行。您可以创建PagerTemplate,并在FormView数据绑定时设置值。您必须处理PageIndexChanging和PageIndexChanged事件以自行更改分页值。