2009-10-05 59 views
1

我有一个ASP.NET Web应用程序(C#),我从数据源获取一些信息并将其显示在gridview中。我想启用分页,但出于某种原因,分页不起作用。我在网上进行了一些研究,发现如果使用数据集,分页的做法会有所不同。当我点击页码时,它会刷新,并说没有要显示的记录。我称之为一个按钮的点击功能这一功能:使用数据集的gridview分页

 bindGrid(cmd); 

这里是我的绑定方法:

private void bindGrid(OracleCommand comm) 
    { 
     OracleDataAdapter adapter = new OracleDataAdapter(comm); 
     DataSet ds = new DataSet(); 

     ds.Tables.Add("Results"); 
     adapter.Fill(ds.Tables["Results"]); 

     grd.DataSource = ds; 
     grd.DataBind(); 
    } 

分页方法:

protected void grdResults_PageIndexChanging(object sender, GridViewPageEventArgs e) 
    { 
     grd.PageIndex = e.NewPageIndex; 
     grd.DataBind(); 
    } 

我怎么做分页用数据集?有人可以帮忙吗?

回答

3

结合还需要因此,而不是获取的该数据:)

protected void grdResults_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    grd.PageIndex = e.NewPageIndex; 
    grd.DataBind(); 
} 

你应该使用:

protected void grdResults_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    grd.PageIndex = e.NewPageIndex; 

    //Create command 
    bindGrid(comm); 

} 
2

而不是你的分页方法grd.DataBind()调用bindGrid()。或者更好的使用数据的一些内置的“业务对象”像ObjectDataSource

0

执行分页的最简单方法是在GridView中设置AllowPaging =“yes”,并且不要在代码隐藏中做任何事情。 GridView将自行遍历其数据集。不要重新绑定。

这对小数据集很好,但对电话簿不太好。正如Tadas所说,ObjectDataSource是在服务器端自己处理分页的方式。使用ObjectDataSource,您根本不需要DataBind;控件处理这个。但是,您确实需要为对象提供Select方法(通常为静态),并且它需要具有第一行和页面大小的参数(将它们设置为ObjectDataSource上的属性)。您同样需要实现Count方法来返回完整的数据集大小;否则分页将不起作用。通过这种方式使用ObjectDataSource,可以将分页的隐藏转移到数据层,页面的加载速度会更快。