我写的帖子的页面  实现分页   每页显示三个回复  还循环的 弄出楼层  (1喽2喽3喽) 我在2008(3.5)上一样的代码  在2010(4.0)上为什么老报错呢??   (索引超出范围。必须为非负值并小于集合大小。)
 private PagedDataSource pds = new PagedDataSource();
        protected void Page_Load(object sender, EventArgs e)
        {
            Server.Execute("panding.aspx");
            if(!IsPostBack)
            {
             this.labusername.Text = Session["name"].ToString();
                //发表人的得到
            this.radUser.Text = Session["name"].ToString();
            //第一次为第一页
            this.labDangPage.Text = "1";
            }
            Bind();
        }
        //这是整个绑定数据分页和几楼几楼的方法
        private void Bind()
        {
            pds.DataSource = huifuleaveManager.getHuifu(Request.QueryString["argus"]).Tables[0].DefaultView;
            pds.AllowPaging = true;
            pds.PageSize = 3;
            pds.CurrentPageIndex = Convert.ToInt32(this.labDangPage.Text) - 1;
            if (pds.IsFirstPage)
            {
                this.lkbFirst.Enabled = false;
                this.lkbBack.Enabled = false;
                this.lkbNext.Enabled = true;
                this.lkbLast.Enabled = true;
            }
            else if (pds.IsLastPage)
            {
                this.lkbFirst.Enabled = true;
                this.lkbBack.Enabled = true;
                this.lkbNext.Enabled = false;
                this.lkbLast.Enabled = false;
            }
            else
            {
                this.lkbFirst.Enabled = true;
                this.lkbBack.Enabled = true;
                this.lkbNext.Enabled = true;
                this.lkbLast.Enabled = true;
            }
            this.labSumPage.Text = pds.PageCount.ToString();
             this.DataList1.DataSource = pds;
            this.DataList1.DataBind();              //楼层
            for (int q = 0; q < pds.PageSize; q++)
            {
                int d1 = Convert.ToInt32(this.labDangPage.Text) - 1;
                int d2 = d1 * 3;
                int d3 = q + 1;
                int d = d3 + d2;       //我刚是这几个表达式在一块的  我怕他出错  就分开了
                (this.DataList1.Items[q].FindControl("labLou") as Label).Text = d.ToString() + "楼";   //就点击下一页的时候  这句报这个错(索引超出范围。必须为非负值并小于集合大小。)
                
            }
           
            
        }
       //这是点击下一页的事件
        protected void lkbNext_Click(object sender, EventArgs e)
        {
           
            this.labDangPage.Text = (Convert.ToInt32(this.labDangPage.Text) + 1).ToString();
            Bind();
        }
我就很郁闷了  为什么一样样的代码  在2010上就报错

解决方案 »

  1.   

    4.0新特性简单的分页
    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                bind();
            }
        }
        void bind()
        {
            int curpage = Convert.ToInt32(this.Label1.Text);
            PagedDataSource ps = new PagedDataSource();
            pagebind(ps);
            ps.AllowPaging = true;
            ps.PageSize = 5;
            ps.CurrentPageIndex = curpage -1;
            this.LinkButton1.Enabled = true;
            this.LinkButton2.Enabled = true;
            this.LinkButton3.Enabled = true;
            this.LinkButton4.Enabled = true;
            if (curpage == 1)
            {
                this.LinkButton1.Enabled = false;
                this.LinkButton2.Enabled = false;
            }
            if (curpage == ps.PageCount)
            {
                this.LinkButton3.Enabled = false;
                this.LinkButton4.Enabled = false;
            }
            this.Label2.Text = ps.PageCount.ToString();
            this.DataList1.DataSource = ps;
            this.DataList1.DataBind();
        }
        void pagebind(PagedDataSource pd)
        { 
            string strcon="server=.;database=pubs;uid=sa;pwd=sa";
            SqlConnection cn = new SqlConnection(strcon);
            SqlDataAdapter da = new SqlDataAdapter("select title_id,title,price from titles", cn);
            DataSet ds = new DataSet();
            da.Fill(ds, "titles");
            pd.DataSource = ds.Tables["titles"].DefaultView;
        }
        protected void LinkButton1_Click(object sender, EventArgs e)
        {
            this.Label1.Text = "1";
            bind();
        }
        protected void LinkButton2_Click(object sender, EventArgs e)
        {
            this.Label1.Text = (Convert.ToInt32(this.Label1.Text) - 1).ToString();
            bind();
        }
        protected void LinkButton3_Click(object sender, EventArgs e)
        {
            this.Label1.Text=(Convert.ToInt32(this.Label1.Text)+1).ToString();
            bind();
        }
        protected void LinkButton4_Click(object sender, EventArgs e)
        {
            this.Label1.Text = Label2.Text;
            bind();
        }