如何使用PagedDataSource和SQL进行分页?

时间:2011-11-23 12:18:18

标签: c# asp.net sql database

我不明白当你需要知道总行数以便让分页工作时,你怎么只能从数据库中获取所需的行数。

我的意思是: 我按照这个例子: http://www.c-sharpcorner.com/uploadfile/rizwan328/datalist-custom-paging-in-Asp-Net-using-C-Sharp/

但是我没有使用dataTable,而是拥有一个数据库。

我从这样的数据库中得到消息,这可以从我的新闻表中得到所有新闻:

List<News> news = News.GetNews();

public static List<News> GetNews(){
    List<News> news = new List<News>();
    using (SqlConnection conn = new SqlConnection(CONNSTRING)) {
            SqlCommand cmd = new SqlCommand("SELECT * FROM News_news ORDER BY date DESC", conn);

从所有新闻中获取所有数据。

然后我创建一个PagedDataSource:

PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = news;
objPds.AllowPaging = true;
objPds.PageSize = numRows;
//Set the current page 
objPds.CurrentPageIndex = CurrentPage;

//Set the buttons

将数据推入转发器,该转发器将显示aspx页面上的前5个项目

repeater1.DataSource = objPds;
repeater1.DataBind(); 

像这样我有一个分页的首页,向我显示总页数和当前页面,当我点击下一页的按钮时,我会重新做一遍。

但我知道这是不正确的,因为我总是得到所有新闻,然后丢弃了我不需要的新闻。但是,请问,如何才能获得所需的新闻?

我是否需要先计算表格中的行数?

3 个答案:

答案 0 :(得分:2)

要使用PagedDataSource,将在查询期间返回所有记录,但您可以使用持久数据存储(Session和ViewState)来存储数据集,以便每个页面请求不必再次访问数据库。

如果您只想撤回您正在查看的页面的记录,据我所知,您将不得不推出自己的分页解决方案。我不久前就遇到了我自己的分页解决方案的需求,这是我问过的一个问题,它帮助我做了我需要做的事,Paging choice, on database or in the web application

答案 1 :(得分:2)

您可以通过将VirtualItemCount设置为项目总数并将AllowCustomPaging设置为true来使用自定义分页。这样,您就可以从特定回发期间的PagedDataSource所需的数据源中检索那些记录集。

答案 2 :(得分:0)

您并不需要知道让PagedDataSource工作的结果数量。鉴于DataSource,它会为您解决这个问题。

在上面的示例中,您没有专门设置PageSize,因此您需要添加

objPds.PageSize = 5;

考虑到您的示例,您可能会考虑更改或添加到GetNews以向查询添加TOP,因为它看起来并不真正需要分页。你需要的只是前5个结果(至少,这就是我读它的方式)。

public static List<News> GetNews(int Top){
    //OTher stuff here.
    SqlCommand cmd = new SqlCommand(String.Format("SELECT TOP {0} * FROM News_news ORDER BY date DESC", Top ), conn);
}

然后调用以下内容,您可以完全摆脱PagedDataSource。

List<News> news = News.GetNews(5);
相关问题