protected void ChangePage()
    {
        SqlConnection conn = DB.CreateConnection();
        conn.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = "select * from shipclass";
        SqlDataAdapter sda = new SqlDataAdapter();
        sda.SelectCommand = cmd;
        DataSet ds = new DataSet();
        sda.Fill(ds);
        GridView gv = new GridView();
        //gv.AllowPaging = true;
        gv.PageSize = 10;
        gv.DataSource = ds;
        gv.DataBind();
        conn.Close();
        phGridView.Controls.Add(gv);
    }注释的那一行去掉注释后gv.DataBind();就报错,
Object reference not set to an instance of an object 请问是什么原因?
  

解决方案 »

  1.   

    你也可以在代码里面动态的修改你要每页显示的条数先定义一个变量来保存数据库中的记录条数
    然后根据条数的多少来决定你要每页显示的条数
    int intPageSize = 0;
    intPageSize = (int)......;
    if(intPageSize <=10)
    {
        //逻辑代码
    }
    else if(intPageSize>=10 || intPageSize<=50 )
    {
       //逻辑代码 
    }
    else
    (
        //逻辑代码
    )像这样就能够达到你的要求:动态创建GridView的分页问题啦
      

  2.   

    动态生成的,没法搞!!!
    点下一页,上一页按钮的时候,动态添加的gridview就会消失,所以最好别用动态的吧
    静态的给你一段1.控加几个分页要用的
              <tr>
                         <td align="center" style="height: 25px">
                             <asp:LinkButton ID="btnFirst" CommandArgument="first" OnClick="PagerButtonClick"
                                 runat="server">首 页</asp:LinkButton>
                             <asp:LinkButton ID="btnPrev" CommandArgument="prev" OnClick="PagerButtonClick" runat="server">上一页   </asp:LinkButton>
                             <asp:LinkButton ID="btnNext" CommandArgument="next" OnClick="PagerButtonClick" runat="server">下一页</asp:LinkButton>
                             <asp:LinkButton ID="btnLast" CommandArgument="last" OnClick="PagerButtonClick" runat="server">尾 页</asp:LinkButton>
                             <asp:Label ID="LblCurrentIndex" runat="server"></asp:Label>
                             <asp:Label ID="LblPageCount" runat="server"></asp:Label>
                             <asp:Label ID="LblRecordCount" runat="server"></asp:Label>
                        </td>
                     </tr>2.绑定数据库源
    this.NewsView.DataSource = ds.Tables[0];
                 this.NewsView.DataBind(); 
                 //分页
                 LblCurrentIndex.Text = "第 " + (NewsView.PageIndex + 1).ToString() + " 页";
                 LblPageCount.Text = "共 " + NewsView.PageCount.ToString() + " 页";
                 LblRecordCount.Text = "总共 "+ds.Tables[0].Rows.Count.ToString()+" 条";
                 if (ds.Tables[0].Rows.Count == 0)
                 {
                     btnFirst.Visible = false;
                     btnPrev.Visible = false;
                     btnNext.Visible = false;
                     btnLast.Visible = false;                 LblCurrentIndex.Visible = false;
                     LblPageCount.Visible = false;
                     LblRecordCount.Visible = false;
                 }
                 else if (NewsView.PageCount == 1)
                 {
                     btnFirst.Visible = false;
                     btnPrev.Visible = false;
                     btnNext.Visible = false;
                     btnLast.Visible = false;
                 }             // 计算生成分页页码,分别为:"首 页" "上一页" "下一页" "尾 页"
                 btnFirst.CommandName = "1";
                 btnPrev.CommandName = (NewsView.PageIndex == 0 ? "1" : NewsView.PageIndex.ToString());             btnNext.CommandName = (NewsView.PageCount == 1 ? NewsView.PageCount.ToString() : (NewsView.PageIndex + 2).ToString());
                 btnLast.CommandName = NewsView.PageCount.ToString();
                 //
             }
             catch(Exception ex)
             {
                 Response.Write("数据库错误,错误原因:"+ex.Message);
                 Response.End();
             }3.添加一个事件
    protected void PagerButtonClick(object sender, EventArgs e)
         {
             NewsView.PageIndex = Convert.ToInt32(((LinkButton)sender).CommandName) - 1;
             DataBindintToGridView();
         }4.PageLoad中
    protected void Page_Load(object sender, EventArgs e)
         {
             if (!IsPostBack)
             {
                 DataBindintToGridView();
             }
         }
      

  3.   

            grdMainList.PageIndex = grdMainList.PageIndex + 1;
            txtstate.Text = (int.Parse(txtstate.Text) + 1).ToString();
            Bind();
            int nPageCount;
            DataTable o = ((DataSet)grdMainList.DataSource).Tables[0];
            if (o.Rows.Count % 10 == 0)
            {
                nPageCount = (o.Rows.Count / 10)-1;
            }
            else
            {
                nPageCount = (int)(o.Rows.Count / 10);
            }
      

  4.   

    给你个简单的例子.private void NavigationButton_Click(object sender, System.Web.UI.ImageClickEventArgs e) {
    string strCommandName=((ImageButton)sender).ID;//取得事件的对象名 switch(strCommandName) {
    case "First":
    _dg.CurrentPageIndex=0;//跳转到首页
    PageOperate();
    break;
    case "Previous":
    _dg.CurrentPageIndex=Math.Max(_dg.CurrentPageIndex-1,0);//跳转到上一页
    PageOperate();
    break;
    case "Next":
    _dg.CurrentPageIndex=Math.Min(_dg.CurrentPageIndex+1,_dg.PageCount-1);//跳转到下一页
    PageOperate();
    break;
    case "Lastly":
    _dg.CurrentPageIndex=_dg.PageCount-1;//跳转到最后一页
    PageOperate();
    break;
    }
    BindData();//绑定数据
    }