【发布时间】:2014-01-29 17:40:17
【问题描述】:
我有一个从我的数据库表“Publishers”绑定的 GridView。 “Publishers”表中有 22,000 多行,每个绑定事件都需要 LONG 时间。
我使用以下技术实现了自定义分页:
public class PublisherDataSource
{
public List<Publisher> GetPublishers(int startIndex, int maxRows)
{
using (CA_Entities db = new CA_Entities ())
{
return (from publisher in db.Publishers
select publisher)
.Where(p => p.isActive == true)
.OrderByDescending(p => p.CreatedDT)
.ThenBy(p => p.SiteURL)
.Skip(startIndex)
.Take(maxRows).ToList();
}
}
public int GetPublishersCount()
{
using (CA_Entities db = new CA_Entities ())
{
return db.Publishers.Count();
}
}
}
在我的网格控件后面的代码中:
CA_Entities db = new CA_Entities ();
// Custom paging, to make DB access & page response quicker
PublisherDataSource pds = new PublisherDataSource();
ObjectDataSource ods = new ObjectDataSource();
ods.EnablePaging = true;
ods.SelectMethod = "GetPublishers";
ods.SelectCountMethod = "GetPublishersCount";
ods.TypeName = pds.ToString();
ods.MaximumRowsParameterName = "maxRows";
ods.StartRowIndexParameterName = "startIndex";
gridPublishers.DataSource = ods;
gridPublishers.DataBind();
这段代码工作得很好,但在我最终绑定网格之前,我想操纵数据库中的结果
例如。删除某些记录,进一步排序和过滤记录。
所以,理想情况下,我想说的是:
List<Publisher> publishers = new List<Publisher>();
publishers.DataSource = ods;
// -data manipulation goes here
gridPublishers.DataSource = publishers;
gridPublishers.DataBind();
当然,a 不能是 DataBound,所以...
谁能告诉我如何使用 ObjectDataSource 填充我的发布者列表?
【问题讨论】:
-
为什么要实现分页,GridView已经支持了。
-
标准 GridView 分页仍然返回整个 db 表,并在服务器端进行分页计算。检索所有数据的时间太长,所以我只需要返回我们需要查看的数据即可。
标签: c# asp.net entity-framework data-binding objectdatasource