我按照帮助,做了个分页但是,加入了一下的代码后,就出现了问题<Columns>
  <asp:TemplateColumn HeaderText="ID">
    <ItemTemplate>
      <a href="#">
        <%# DataBinder.Eval(Container.DataItem,"ID")%>
      </a>
    </ItemTemplate>
  </asp:TemplateColumn>
  <asp:BoundColumn DataField="UserName" HeaderText="用户名"></asp:BoundColumn>
  <asp:BoundColumn DataField="Passwd" HeaderText="密码"></asp:BoundColumn>
  <asp:ButtonColumn HeaderText="操作" Text="&lt;div onclick=&quot;javascript:return confirm('确定删除吗?')&quot;&gt;删除&lt;/div&gt;" CommandName="Delete">
  </asp:ButtonColumn>
</Columns>经过测试, 如果没有下面的代码,还是可以显示的  <asp:TemplateColumn HeaderText="ID">
    <ItemTemplate>
      <a href="#">
        <%# DataBinder.Eval(Container.DataItem,"ID")%>
      </a>
    </ItemTemplate>
  </asp:TemplateColumn>有了上面的代码后,第一页显示正常,第二页也正常,但到了第三页,就出现错误,以后随便按那个按钮都出现同样的错误:System.Web.HttpException: 未能加载视图状态。正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配。例如,当以动态方式添加控件时,在回发期间添加的控件必须与在初始请求期间添加的控件的类型和位置相匹配。

解决方案 »

  1.   

    绑定DataGrid时,对分页进行一下判断
    try
    {
    MyDataGrid2.DataBind();
    }
    catch
    {
    int i=MyDataGrid2.CurrentPageIndex;
    while(i>=MyDataGrid2.PageCount)                      
    {
    i--;
    }
    MyDataGrid2.CurrentPageIndex=i;
    MyDataGrid2.DataBind ();
    }
      

  2.   

    To wangdequan1024(紫夜) :那么数据绑定是在设置CurrentPageIndex前,还是后?我现在是这样的:String strSQL = "select ID,UserName,Passwd,tmp from T_user";
    DataSet ds = CarsSelector.DBServlet.selectQuery(strSQL);
    DataGrid1.DataSource = ds.Tables[0];
    DataGrid1.DataBind();
    DataGrid1.CurrentPageIndex = 0;
    Session["sessionDS"] = ds;
      

  3.   

    To zydchina(梦海飞翔) :我是现在Page_Load里,进行查询,然后把DataSet 放到session里:String strSQL = "select ID,UserName,Passwd,tmp from T_user";
    DataSet ds = CarsSelector.DBServlet.selectQuery(strSQL);
    DataGrid1.DataSource = ds.Tables[0];
    DataGrid1.DataBind();
    DataGrid1.CurrentPageIndex = 0;
    Session["sessionDS"] = ds;以后从session读出DataSet :DataSet ds1 = (DataSet)Session["sessionDS"];
    DataGrid1.DataSource = ds1.Tables[0];
    DataGrid1.DataBind();
    DataGrid1.CurrentPageIndex = 
    Math.Min(DataGrid1.CurrentPageIndex + 1, DataGrid1.PageCount - 1);
      

  4.   

    这是因为你有删除操作导致的页的错误,一般出现在最后一页只有一条记录
    时删除时页面的CurrentPageIndex判断不正确String strSQL = "select ID,UserName,Passwd,tmp from T_user";
    DataSet ds = CarsSelector.DBServlet.selectQuery(strSQL);
    DataGrid1.DataSource = ds.Tables[0];
    try
    {
    DataGrid1.DataBind();
    }
    catch
    {
    int i=DataGrid1.CurrentPageIndex;
    while(i>=DataGrid1.PageCount)                      
    {
    i--;
    }
    DataGrid1.CurrentPageIndex=i;
    DataGrid1.DataBind ();
    }
      

  5.   

    还是不对。。private void NavigationButtonClick(object sender, System.EventArgs e)
    {
      string direction = ((Button)sender).CommandName;  DataSet ds1 = (DataSet)Session["sessionDS"];
      DataGrid1.DataSource = ds1.Tables[0];
      try 
      {
        DataGrid1.DataBind();
      }
      catch
      {
        int i = DataGrid1.CurrentPageIndex;
        while( i >= DataGrid1.PageCount )                      
        {
          i--;
        }
        DataGrid1.CurrentPageIndex = i;
        DataGrid1.DataBind();
      }
      switch (direction.ToUpper())
      {
        case "FIRST" :
          DataGrid1.CurrentPageIndex = 0;
          break;
        case "PREVIOUS" :
          DataGrid1.CurrentPageIndex = 
          Math.Max(DataGrid1.CurrentPageIndex -1, 0);
          break;
        case "NEXT" :
          DataGrid1.CurrentPageIndex = 
          Math.Min(DataGrid1.CurrentPageIndex + 1, DataGrid1.PageCount - 1);
          break;
        case "LAST" :
          DataGrid1.CurrentPageIndex = DataGrid1.PageCount - 1;
          break;
        default :
          Label1.Text = "error";
          break;
      }
      Session["sessionDS"] = ds1;
    }