AspNetPager我采用回传postback方式对GridView分页源码如下:
protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
        }
        else
        {
            BindGridView();
        }
    }protected void BindGridView()
{
//关键代码
PagedDataSource pds = new PagedDataSource();
        pds.AllowPaging = true;
        pds.DataSource = m_DbInterface.GetDataSet().Tables[0].DefaultView;
        AspNetPager1.RecordCount = pds.DataSourceCount;
        AspNetPager1.AlwaysShow = true;
        pds.PageSize = AspNetPager1.PageSize;
        pds.CurrentPageIndex = AspNetPager1.CurrentPageIndex - 1;
        //_GridView.PageIndex = AspNetPager1.CurrentPageIndex - 1;
        _GridView.DataSource = pds;
}protected void AspNetPager1_PageChanged(object src, EventArgs e)
    {
        SetGridViewAttribute(DataBase.DbSpecificOperator.QueryYk);    }
现在碰到一个问题,就是点击分页的页码的时候,比如当前是第一页,我点第二页的页码,但gridview
还是显示第一页的内容,此时AspNetPager1.CurrentPageIndex = 1;而显示的页码确实是第二页的,红色字体但当我第二次点第二页的页码,此时的问题就奇怪了,
如下:
这一次选第二页,内容还是第一页的内容,但当我再点第一页的页码的时候,反而显示第二页的内容了就是说,第一页,第二页的内容正好反掉了我想问下,用回传方式分页,我上面的代码哪地方调用顺序错了还是怎样,为什么会出现如上的情况 啊?????

解决方案 »

  1.   

    _GridView.DataSource = pds;下面加一句看看
    _GridView.DataBind();
      

  2.   

    最好使用Sql语句进行分页。PagedDataSource分页是将所有数据都读出后再进行分页,当数据量很大时就会变卡。sql语句分页只读取当前页面的数据。我记得ListView和GridView都可以直接选分页功能,Repeater要自己写代码的。没怎么用过GridView,感觉太占资源了。
      

  3.   

    xml+aspnetpager+gridview分页示例:
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                BindGridView1(1);
        }    private void BindGridView1(int pageIndex)
        {
            DataSet ds = new DataSet();
            ds.ReadXml(Server.MapPath("~/test.xml"));
            DataTable dt = ds.Tables["学生信息"];
            PagedDataSource pds = new PagedDataSource();
            pds.AllowPaging = true;
            pds.DataSource = dt.DefaultView;
            pds.PageSize = 3;
            pds.CurrentPageIndex = pageIndex - 1;
            AspNetPager1.RecordCount = dt.Rows.Count;
            GridView1.DataSource = pds;
            GridView1.DataBind();
        }    protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e)
        {
            BindGridView1(e.NewPageIndex);
        }
      

  4.   


    我在下面引用DataBind了,没写出来
      

  5.   

    mizuho_2006:这个倒没想过,受教了
      

  6.   

    dalmeemed大大:这种是用URL分页的,我一开始用的,但感觉和我的要求不符,就准备采用POSTBACK方式。
      

  7.   

    我给你的不是url分页,就是普通的分页。
      

  8.   


    我改成你这种方式了,现在页码正常了!!非常感谢! 但还是有个问题,就是我不点击页码查询的时候都是好的,但我点击页码换页后,比如先前查到10月20号有几十条数据,显示出来了,但我换个日期查的时候,比如查10月25号的数据,但在GridView的第一行还是20号的数据,下面则都是25号的数据了为什么点击换页会有之前的残余数据?
      

  9.   

      if (!Page.IsPostBack)
            {
                BindGridView();
            }
    private void BindGridView1()
    { Gridview.DataSource=ds;
     AspNetPager1.RecordCount=占总数‘;
    }
    protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e)
      {
         AspNetPager1.CurrentPageIndex = e.NewPageIndex;
         BindGridView();
        }
    一样可以
      

  10.   

    这个跟你数据库的sql语句有关吧。
      

  11.   

    非要需要 PagedDataSource ,
    不要 PagedDataSource ,查询绑定很正常,
    先设置dtasouce=null.再绑定