我正在尝试在 asp.net 中找到一个解决方案以实现数据分页,因此 1)应用程序不必在每个页面索引更改时连接到 DB,以便检索整个集合或仅检索一组分页结果 2 ) 不想将结果存储在 Viewstate 或 Session 中
对于大型结果集,我正在考虑将键值(ID、行号)存储在结果集(数组、json)中,然后在行绑定上填充其他行信息。
有没有办法在 asp.net 中做到这一点,或者我需要为这种情况考虑 jQuery。
我正在尝试在 asp.net 中找到一个解决方案以实现数据分页,因此 1)应用程序不必在每个页面索引更改时连接到 DB,以便检索整个集合或仅检索一组分页结果 2 ) 不想将结果存储在 Viewstate 或 Session 中
对于大型结果集,我正在考虑将键值(ID、行号)存储在结果集(数组、json)中,然后在行绑定上填充其他行信息。
有没有办法在 asp.net 中做到这一点,或者我需要为这种情况考虑 jQuery。
1) 应用程序不必在每次页面索引更改时连接到数据库,以检索整个结果集或仅检索一组分页结果
您需要缓存结果。例如:
例子:
<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
orDataTable
才能为缓存结果添加排序功能
2)不想将结果存储在 Viewstate 或 Session 中
同样,您需要使用缓存
有没有办法在 asp.net 中做到这一点,或者我需要为这种情况考虑 jQuery。
我看不出 jQuery(单独)如何帮助您满足您的要求,我的意思是,如果您使用 AJAX 帖子,您会提高当前页面的感知性能,但这无助于您与数据库的连接除非你使用缓存
我不确定它是否满足您的所有要求,但分页是PagedDataSource 类
封装允许其执行分页的数据绑定控件(例如 DataGrid、GridView、DetailsView 和 FormView)的分页相关属性。这个类不能被继承。
否则,我建议您查看JqGrid
对于分页数据集,您通常有 2 个选项:
如果您期望一个小的结果集(即将搜索结果限制为 500 行或更少),那么使用 viewstate 是完全可以接受的。我个人更喜欢避免使用 session 来存储请求级别的数据
无论您如何呈现数据(jQuery/ajax 或服务器控件),您仍然必须一次性获取整个结果集并将其缓存以供后续请求(json 数组或视图状态),或者您需要支持分页的数据源. 如果您关心性能,那么分页数据源是可行的方法(EF 示例也适用于 Web 表单,只需使用您的事件处理程序而不是 mvc 中的操作方法)。