使用数据集的gridview分页

时间:2009-10-05 17:25:52

标签: c# asp.net gridview dataset pagination

我有一个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();
    }

我应该如何使用数据集进行分页?有人可以帮忙吗?

3 个答案:

答案 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,可以将分页的转差转移到数据层,并且页面加载速度会快得多。