一直不知道该怎么样给没有内置分页的DataLiat进行分页,网上提供的分页算法大致两种,一种是通过数据库分页,另一种是通过PageDataSource,数据库的分页是肯定高效的,但是我还没有学会,而且使用sql2000和sql2005的数据库分页方法是不同的,而我使用的是sql2000,没有内置的分页函数。通PageDataSource分页的方法很多,但是有一点要求,那就是DataSource必须是DataSet的Row,而我学习使用的3层用的是返回泛型接口IList<>,我没有好的解决办法,在博问上50分悬赏也没有人回答,很疑惑,今天找到Scott Mitchell的asp.net2.0数据教程,因为3层结构我是看了前3章才入的门。第四十四章是专门讲DataList和Repeater数据分页的,其中有段代码给了我很大的启示:
Code
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, false)]
public PagedDataSource GetProductsAsPagedDataSource(int pageIndex, int pageSize)
{
// Get ALL of the products
Northwind.ProductsDataTable products = GetProducts();
// Limit the results through a PagedDataSource
PagedDataSource pagedData = new PagedDataSource();
pagedData.DataSource = products.Rows;
pagedData.AllowPaging = true;
pagedData.CurrentPageIndex = pageIndex;
pagedData.PageSize = pageSize;
return pagedData;
}
“获得所有产品,然后通过PagedDataSource进行结果限制”
我通过泛型获得的也是所有结果,那么是不是可以筛选结果获得我所需要的呢?
于是有了下面的代码:
Code
public IList<Article> PageDataListBind(string type,int minPage,int PageSize)
{
//获得同类型的所有新闻
IList<Article> page = new List<Article>();
IList<Article> articles = new List<Article>();
articles = this.GetArticleTitleByType(type);
int count = minPage + PageSize;
if(count>=articles.Count)
{
count = articles.Count;
}
//通过参数分页
for (int i = minPage; i <= count; i++)
{
page.Add(articles[i]);
}
return page;
}
结果是可以的,通过设置ObjectDataSource的筛选参数,进行分页设置。
虽然达到了需求,但是有很大的浪费。希望博友能帮我想想更好的办法