我试图在asp.net中找到一个解决方案,以便实现数据分页 1)应用程序不必在每次页面索引更改时连接到DB,以便检索整个集合或仅查找一组分页结果 2)不希望将结果存储在Viewstate或Session
中对于大型结果集,我考虑将键值(ID,rownumber)存储在结果集(数组,json)中,然后在行绑定上填充其他行信息。
有没有办法在asp.net中执行此操作,或者我需要考虑jQuery用于此场景。
答案 0 :(得分:5)
1)应用程序不必在每次页面索引更改时连接到DB,以便检索整个集合或只是一组分页结果
您需要缓存结果。例如:
示例:
<asp:SqlDataSource runat="server" ID="sdsd"
SelectCommand="select * from jobs"
SelectCommandType="Text"
DataSourceMode="DataSet"
ConnectionString="<%$ConnectionStrings: PUBSConnectionString %>"
CacheDuration="30"
EnableCaching="true"
>
</asp:SqlDataSource>
<asp:DropDownList ID="ddl" runat="server" AutoPostBack="true" DataSourceID="sdsd" DataTextField="job_desc" DataValueField="job_id">
</asp:DropDownList>
您始终可以将结果缓存在代码中:
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
IEnumerable<employee> res = Enumerable.Empty<employee>();
if (this.Cache["emp"] == null)
{
res = this.GetEmployeesFromDatabase();
this.Cache["emp"] = res;
}
else
{
res = this.GetEmployeesFromCache();
}
this.grv.DataSource = res;
this.grv.DataBind();
}
}
protected IEnumerable<employee> GetEmployeesFromDatabase()
{
// go to your database to get the objects
return Enumerable.Empty<employee>();
}
protected IEnumerable<employee> GetEmployeesFromCache()
{
return this.Cache["emp"] as IEnumerable<employee>;
}
请注意,返回的对象必须是DataSet
或DataTable
,才能为缓存结果添加排序功能
2)不希望将结果存储在Viewstate或Session
中
您需要再次使用缓存
有没有办法在asp.net中执行此操作,或者我需要考虑jQuery用于此场景。
我不知道jQuery(本身)如何帮助你满足你的需求,我的意思是如果你使用AJAX帖子,你会提高当前页面的感知性能,但这对你的连接没有帮助除非你使用缓存
,否则到数据库答案 1 :(得分:2)
我不确定它是否涵盖了您的所有要求,但是对其进行分页是PagedDataSource Class
封装允许其执行分页的数据绑定控件(如DataGrid,GridView,DetailsView和FormView)的与分页相关的属性。这个类不能被继承。
否则我建议您查看JqGrid
答案 2 :(得分:1)
对于分页数据集,您通常有两个选项:
如果你期望一个小的结果集(即将搜索结果限制在500行或更少),那么使用viewstate是完全可以接受的。我个人更喜欢避免使用会话来存储请求级别数据
无论您如何呈现数据(jQuery / ajax或服务器控件),您仍然必须一次性获取整个结果集并将其缓存以用于后续请求(json数组或视图状态),或者您需要数据源支持分页。如果您关注性能,那么分页数据源是可行的方法(EF示例也适用于webforms,只需使用事件处理程序而不是mvc中的action方法)。