我有一个ASP.NET Web应用程序(C#),我从数据源获取一些信息并将其显示在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();
}
我应该如何使用数据集进行分页?有人可以帮忙吗?
答案 0 :(得分: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);
}
答案 1 :(得分:2)
而不是grd.DataBind()
在您的分页方法中调用bindGrid()
。或者更好地使用一些内置的“业务对象”进行数据绑定,如ObjectDataSource
答案 2 :(得分:0)
进行分页的最简单方法是在GridView中设置AllowPaging =“yes”,并且不在代码隐藏中执行任何操作。 GridView将自行翻阅其数据集。不要重新绑定。
这对于小型数据集来说很好,但对于电话簿却不太好。正如Tadas所说,ObjectDataSource是在服务器端自行处理寻呼的方法。使用ObjectDataSource,您根本不会使用DataBind;控件处理。但是,您确实需要在对象上提供Select方法(通常是静态),并且需要具有第一行和页面大小的参数(将这些参数设置为ObjectDataSource上的属性)。您还需要实现一个Count方法来返回完整的数据集大小;否则分页将无法正常工作。通过这种方式使用ObjectDataSource,可以将分页的转差转移到数据层,并且页面加载速度会快得多。