CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

分页出错(问题解决就结贴)

楼主guyong009(问题这么多,快要上岗了)2005-08-03 15:56:54 在 .NET技术 / ASP.NET 提问

一、问题描述:  
          当查询出来的数据超过2页,比如有3页时,点击“下一页”没法翻到第三页,一直都是在第二页。  
  二、全部代码:  
  1、页面装载代码:  
  private   void   Page_Load(object   sender,   System.EventArgs   e)  
  {  
  btnFirst.Text   =   "最首页";  
  btnPrev.Text   =   "前一页";  
  btnNext.Text   =   "下一页";  
  btnLast.Text   =   "最后页";  
  OpenDatabase();  
  BindGrid();  
  }  
          2、数据库关闭打开代码:  
  private   void   OpenDatabase()  
  {  
                                                  cn.Close();  
              cn.Open();  
  }  
          3、显示总共多少页和当前第几页的代码:  
  private   void   ShowStats()  
  {  
      lblCurrentIndex.Text   =   "第   "   +   (MyDataGrid.CurrentPageIndex   +   1).ToString()   +   "   页";  
      lblPageCount.Text   =   "总共   "   +   MyDataGrid.PageCount.ToString()   +   "   页";  
  }  
            4、“上一页”、“下一页”等按钮的单击代码:  
  public   void   PagerButtonClick(object   sender,   EventArgs   e)  
  {  
  string   arg   =   ((LinkButton)sender).CommandArgument.ToString();  
  switch(arg)  
  {  
  case   "next":  
  if   (MyDataGrid.CurrentPageIndex   <   (MyDataGrid.PageCount   -   1))  
  {  
        MyDataGrid.CurrentPageIndex   +=   1;  
  }  
  break;  
  case   "prev":  
  if   (MyDataGrid.CurrentPageIndex   >   0)  
  {  
        MyDataGrid.CurrentPageIndex   -=   1;  
  }  
  break;  
  case   "last":  
                    MyDataGrid.CurrentPageIndex   =   (MyDataGrid.PageCount   -   1);  
                    break;  
  default:  
  MyDataGrid.CurrentPageIndex   =   System.Convert.ToInt32(arg);  
  break;  
  }  
  BindGrid();  
  ShowStats();  
  }  
            5、执行SQL语句的代码:  
  public   void   BindGrid()  
  {  
  string   flmc=DropDownList1.SelectedItem.Text;  
  string   sql_tj="";  
  if   (flmc!="所有代码")  
          sql_tj="   and   flmc='"+flmc+"'";  
  string   sqlstring="select   *   from   clgl_xtdm   where   xh   like   '%'";  
  sqlstring=sqlstring+sql_tj;  
  sqlstring+="   order   by   fldh,xmmc";  
  OleDbConnection   myConnection   =   cn;  
  DataSet   ds     =   new   DataSet();  
  OleDbDataAdapter   adapter     =   new   OleDbDataAdapter(sqlstring,myConnection);  
  adapter.Fill(ds,"clgl_xtdm");  
  MyDataGrid.DataSource   =   ds.Tables["clgl_xtdm"].DefaultView;  
  MyDataGrid.DataBind();  
  MyDataGrid.CurrentPageIndex   =   0;//(问题好象就出在这句,但如果这句取消的话,在查询条件改变的时候程序会报错:无效的   CurrentPageIndex   值。它必须大于等于   0   且小于   PageCount)  
  ShowStats();  
  }  
                6、进行页数统计的代码:  
  public   void   MyDataGrid_Page(object   sender,   DataGridPageChangedEventArgs   e)  
  {  
  int   startIndex   ;  
  startIndex   =   MyDataGrid.CurrentPageIndex   *   MyDataGrid.PageSize;  
  MyDataGrid.CurrentPageIndex   =   e.NewPageIndex;  
  BindGrid();  
  ShowStats();  
  }  
                  7、下拉框的值改变时的事件代码(无代码,里面是空的)  
  private   void   DropDownList1_SelectedIndexChanged(object   sender,   System.EventArgs   e)  
  {  
                                        }  
  四、问题好象就出在第5点“执行SQL语句的代码:”里的一句代码  
  MyDataGrid.CurrentPageIndex   =   0;//(问题好象就出在这句,但如果这句取消的话,在查询条件改变的时候程序会报错:无效的   CurrentPageIndex   值。它必须大于等于   0   且小于   PageCount)  
   
   
  请问应该怎么修改?  
  问题点数:100、回复次数:11Top

1 楼luckyprg(lucky)回复于 2005-08-03 16:09:29 得分 20

MyDataGrid.CurrentPageIndex   =   0;  
  改成  
  MyDataGrid.CurrentPageIndex   =   e.NewPageIndex;Top

2 楼pontus(pontus)回复于 2005-08-03 16:11:29 得分 0

只要在查询时把MyDataGrid.CurrentPageIndex   =   0   就可以了Top

3 楼yichuan1982(亦川——四川新津)回复于 2005-08-03 16:11:35 得分 5

string   arg=((LinkButton)sender).CommandArgument;  
  switch(arg)  
  {  
  case   ("first"):  
  this.DGzf.CurrentPageIndex=0;  
  break;  
  case   ("prev"):  
  if(this.DGzf.CurrentPageIndex>0)  
  this.DGzf.CurrentPageIndex--;  
  break;  
  case   ("next"):  
  if(this.DGzf.CurrentPageIndex<(this.DGzf.PageCount-1))  
  this.DGzf.CurrentPageIndex++;  
  break;  
  case   ("last"):  
  this.DGzf.CurrentPageIndex=this.DGzf.PageCount-1;  
  break;  
  default:  
  this.DGzf.CurrentPageIndex=Convert.ToInt32(arg);  
  break;  
  }Top

4 楼luckyprg(lucky)回复于 2005-08-03 16:12:13 得分 30

Sorry,上面没细看你是在哪里执行的,上面的是错误的。  
   
  你应把MyDataGrid.CurrentPageIndex   =   0;这里的0改成的你页次-1.  
  而且把MyDataGrid.DataBind();放到上面这句的后面。应该就可以了。  
  Top

5 楼tigerwen01(小虎)回复于 2005-08-03 16:13:31 得分 10

参考例子来修改:  
   
  DataGrid分页例子(C#)  
   
  C#版本  
  DataGridPaging.aspx  
  <%@   Page   language="c#"   EnableViewState   =   "true"   Codebehind="DataGridPaging.aspx.cs"  
    AutoEventWireup="false"   Inherits="eMeng.Exam.DataGridPaging.DataGridPaging"   %>  
  <!DOCTYPE   HTML   PUBLIC   "-//W3C//DTD   HTML   4.0   Transitional//EN">  
  <HTML>  
  <HEAD>  
  <meta   content="Visual   Basic   7.0"   name="CODE_LANGUAGE">  
  <meta   content="JavaScript"   name="vs_defaultClientScript">  
  <meta   content="http://schemas.microsoft.com/intellisense/ie5"   name="vs_targetSchema">  
  </HEAD>  
  <body   MS_POSITIONING="GridLayout">  
  <form   id="Form1"   runat="server">  
  <asp:datagrid   id="MyDataGrid"   runat="server"   AutoGenerateColumns="False"  
    HorizontalAlign="Center"   AlternatingItemStyle-BackColor="#eeeeee"  
    HeaderStyle-BackColor="#aaaadd"   Font-Size="8pt"   Font-Name="Verdana"  
    CellSpacing="0"   CellPadding="3"   GridLines="Both"   BorderWidth="1"  
    BorderColor="black"   OnPageIndexChanged="MyDataGrid_Page"   PagerStyle-HorizontalAlign="Right"  
    PagerStyle-Mode="NumericPages"   PageSize="5"   AllowPaging="True">  
      <AlternatingItemStyle   BackColor="#EEEEEE"></AlternatingItemStyle>  
      <HeaderStyle   BackColor="#AAAADD"   Font-Bold="True"   HorizontalAlign="Center"></HeaderStyle>  
      <PagerStyle   HorizontalAlign="Right"   Mode="NumericPages"></PagerStyle>  
      <Columns>  
      <asp:BoundColumn   HeaderText="标题"   DataField="Title"   HeaderStyle-Width="480px">  
      </asp:BoundColumn>  
      <asp:BoundColumn   HeaderText="发表日期"   DataField="CreateDate"   DataFormatString="{0:yyyy-MM-dd   hh:mm:ss}">  
      </asp:BoundColumn>  
      </Columns>  
  </asp:datagrid>  
  <p   style="FONT-SIZE:9pt"   align="center">  
      <asp:label   id="lblPageCount"   runat="server"></asp:label>&nbsp;  
      <asp:label   id="lblCurrentIndex"   runat="server"></asp:label>  
      <asp:linkbutton   id="btnFirst"   onclick="PagerButtonClick"   runat="server"   Font-Name="verdana"  
        Font-size="8pt"   ForeColor="navy"   CommandArgument="0"></asp:linkbutton>&nbsp;  
      <asp:linkbutton   id="btnPrev"   onclick="PagerButtonClick"   runat="server"   Font-Name="verdana"  
        Font-size="8pt"   ForeColor="navy"   CommandArgument="prev"></asp:linkbutton>&nbsp;  
      <asp:linkbutton   id="btnNext"   onclick="PagerButtonClick"   runat="server"   Font-Name="verdana"  
        Font-size="8pt"   ForeColor="navy"   CommandArgument="next"></asp:linkbutton>&nbsp;  
      <asp:linkbutton   id="btnLast"   onclick="PagerButtonClick"   runat="server"   Font-Name="verdana"  
        Font-size="8pt"   ForeColor="navy"   CommandArgument="last"></asp:linkbutton>  
  </p>  
  </form>  
  </body>  
  </HTML>  
  DataGridPaging.aspx.cs  
  using   System;  
  using   System.Collections;  
  using   System.ComponentModel;  
  using   System.Data;  
  using   System.Data.OleDb;  
  using   System.Drawing;  
  using   System.Web;  
  using   System.Web.SessionState;  
  using   System.Web.UI;  
  using   System.Web.UI.WebControls;  
  using   System.Web.UI.HtmlControls;  
  namespace   eMeng.Exam.DataGridPaging  
  {  
  ///   <summary>  
  ///   DataGridPaging   的摘要说明。  
  ///   </summary>  
  public   class   DataGridPaging   :   System.Web.UI.Page  
  {  
    protected   System.Web.UI.WebControls.DataGrid   MyDataGrid;  
    protected   System.Web.UI.WebControls.Label   lblPageCount;  
    protected   System.Web.UI.WebControls.Label   lblCurrentIndex;  
    protected   System.Web.UI.WebControls.LinkButton   btnFirst;  
    protected   System.Web.UI.WebControls.LinkButton   btnPrev;  
    protected   System.Web.UI.WebControls.LinkButton   btnNext;  
    protected   System.Web.UI.WebControls.LinkButton   btnLast;  
    private   OleDbConnection   cn   =   new   OleDbConnection();  
  private   void   Page_Load(object   sender,   System.EventArgs   e)  
  {  
      //   在此处放置用户代码以初始化页面  
      btnFirst.Text   =   "最首页";  
      btnPrev.Text   =   "前一页";  
      btnNext.Text   =   "下一页";  
      btnLast.Text   =   "最后页";  
      OpenDatabase();  
      BindGrid();  
  }  
  private   void   OpenDatabase()  
  {  
    cn.ConnectionString   =   "Provider=Microsoft.Jet.OLEDB.4.0;Data   Source="   +   Server.MapPath("xxxx.mdb");  
    cn.Open();  
  }  
  private   void   ShowStats()  
  {  
    lblCurrentIndex.Text   =   "第   "   +   (MyDataGrid.CurrentPageIndex   +   1).ToString()   +   "   页";  
    lblPageCount.Text   =   "总共   "   +   MyDataGrid.PageCount.ToString()   +   "   页";  
  }  
  public   void   PagerButtonClick(object   sender,   EventArgs   e)  
  {  
    string   arg   =   ((LinkButton)sender).CommandArgument.ToString();  
    switch(arg)  
    {  
      case   "next":  
        if   (MyDataGrid.CurrentPageIndex   <   (MyDataGrid.PageCount   -   1))  
        {  
          MyDataGrid.CurrentPageIndex   +=   1;  
        }  
        break;  
      case   "prev":  
        if   (MyDataGrid.CurrentPageIndex   >   0)  
        {  
          MyDataGrid.CurrentPageIndex   -=   1;  
        }  
        break;  
      case   "last":  
        MyDataGrid.CurrentPageIndex   =   (MyDataGrid.PageCount   -   1);  
        break;  
      default:  
        MyDataGrid.CurrentPageIndex   =   System.Convert.ToInt32(arg);  
        break;  
    }  
    BindGrid();  
    ShowStats();  
  }  
  public   void   BindGrid()  
  {  
    OleDbConnection   myConnection   =   cn;  
    DataSet   ds     =   new   DataSet();  
    OleDbDataAdapter   adapter     =   new   OleDbDataAdapter("Select   Title,CreateDate   from   Document",   myConnection);  
    adapter.Fill(ds,   "Document");  
    MyDataGrid.DataSource   =   ds.Tables["Document"].DefaultView;  
    MyDataGrid.DataBind();  
    ShowStats();  
  }  
  public   void   MyDataGrid_Page(object   sender,   DataGridPageChangedEventArgs   e)  
  {  
    int   startIndex   ;  
    startIndex   =   MyDataGrid.CurrentPageIndex   *   MyDataGrid.PageSize;  
    MyDataGrid.CurrentPageIndex   =   e.NewPageIndex;  
    BindGrid();  
    ShowStats();  
  }  
  #region   Web   Form   Designer   generated   code  
  override   protected   void   OnInit(EventArgs   e)  
  {  
  //  
  //   CODEGEN:该调用是   ASP.NET   Web   窗体设计器所必需的。  
  //  
  InitializeComponent();  
  base.OnInit(e);  
  }  
  ///   <summary>  
  ///   设计器支持所需的方法   -   不要使用代码编辑器修改  
  ///   此方法的内容。  
  ///   </summary>  
  private   void   InitializeComponent()  
  {  
  this.Load   +=   new   System.EventHandler(this.Page_Load);  
  }  
  #endregion  
  }  
  }  
   
  Top

6 楼yichuan1982(亦川——四川新津)回复于 2005-08-03 16:14:49 得分 10

MyDataGrid.CurrentPageIndex   =   0  
   
  你是怎样执行查询的?  
  如果这样做的话不要这句应该不会报错的?Top

7 楼yichuan1982(亦川——四川新津)回复于 2005-08-03 16:18:53 得分 10

MyDataGrid.CurrentPageIndex   =   0  
   
  你先置0,然后再绑定看下  
   
  MyDataGrid.CurrentPageIndex   =   0;  
  MyDataGrid.DataBind();  
  Top

8 楼tomsoncat(蝈蝈)回复于 2005-08-03 16:19:11 得分 10

你的BindGrid里最后每次都给MyDataGrid.CurrentPageIndex   =   0当然不行  
  这个应该去掉,而你出现的问题是没有在查询后初始化当前页,或者查询后MyDataGrid.CurrentPageIndex   =   0Top

9 楼jacklkc()回复于 2005-08-03 16:32:01 得分 0

public   void   bindgrid()  
  {//把数据绑定到DataGrid控件中  
  string   conn=ConfigurationSettings.AppSettings["Studentconn"];  
  SqlConnection   sqlcon=new   SqlConnection(conn);  
  sqlcon.Open();  
  string   sql="select   *   from   Student   order   by   xm   desc";  
  SqlDataAdapter   da=new   SqlDataAdapter(sql,sqlcon);  
  DataSet   ds=new   DataSet();  
  da.Fill(ds);  
  lblcount.Text="总共有"+ds.Tables[0].Rows.Count.ToString()+"条记录";//总的记录数  
  DataGrid1.DataSource=ds;  
  DataGrid1.DataBind();  
  for(int   i=0;i<DataGrid1.Items.Count;i++)  
  {  
  bool   k=(bool)ds.Tables[0].Rows[i]["bys"];  
  if(k)  
  {  
  CheckBox   ch=(CheckBox)DataGrid1.Items[i].FindControl("IsCheck");  
  ch.Checked=true;  
  }  
  else  
  {}  
  }  
  }  
  private   void   DataGrid1_PageIndexChanged(object   source,   System.Web.UI.WebControls.DataGridPageChangedEventArgs   e)  
  {  
  DataGrid1.CurrentPageIndex=e.NewPageIndex;  
  bindgrid();  
  }  
  public   void   showstats()  
  {  
  lblCurrentIndex.Text="当前第"+(DataGrid1.CurrentPageIndex+1).ToString()+"页"+"/总共"+DataGrid1.PageCount.ToString()+"页";  
  lblPageCount.Text="当前页有"+DataGrid1.Items.Count.ToString()+"记录";  
   
  }  
   
  public   void   PagerButtonClick(object   sender,EventArgs   e)  
  {  
  string   arg=((LinkButton)sender).CommandArgument.ToString();//LindButton控件传递CommandArgument的命令参数  
  switch(arg)  
  {  
  case   "next"://下一页  
  if(DataGrid1.CurrentPageIndex<(DataGrid1.PageCount-1))  
  {  
  DataGrid1.CurrentPageIndex+=1;  
  }  
  break;  
  case   "prev"://上一页  
  if(DataGrid1.CurrentPageIndex>0)  
  {  
  DataGrid1.CurrentPageIndex-=1;  
  }  
  break;  
  case   "last"://尾页  
  DataGrid1.CurrentPageIndex=(DataGrid1.PageCount-1);  
  break;  
  default://首页  
  DataGrid1.CurrentPageIndex=System.Convert.ToInt32(arg);  
  break;  
   
  }  
  bindgrid();  
  showstats();  
   
  }Top

10 楼guyong009(问题这么多,快要上岗了)回复于 2005-08-03 16:39:44 得分 0

TO:   luckyprg(lucky)  
  改成MyDataGrid.CurrentPageIndex   -=   1;  
          MyDataGrid.DataBind();  
  后出现如下错误:指定的参数已超出有效值的范围。参数名:   value    
  源错误:    
   
   
  行   95:   MyDataGrid.DataSource   =   ds.Tables["clgl_xtdm"].DefaultView;  
  行   96:    
  行   97:   MyDataGrid.CurrentPageIndex   -=   1;  
  行   98:   MyDataGrid.DataBind();  
  行   99:   ShowStats();  
     
  TO:tomsoncat(蝈蝈)   把MyDataGrid.CurrentPageIndex   =   0去掉后查询条件改变时会出错。  
  TO:yichuan1982(亦川——四川新津)   (   )         你先置0,然后再绑定的话,只能显示第一页,没法显示后面的页  
  Top

11 楼ChengKing((.net: http://blog.csdn.net/ChengKing ))回复于 2005-08-03 16:57:22 得分 5

MyDataGrid.CurrentPageIndex   =   0;//(问题好象就出在这句,但如果这句取消的话,在查询条件改变的时候程序会报错:无效的   CurrentPageIndex   值。它必须大于等于   0   且小于    
   
  这句去掉试一下Top

相关问题

  • 分页出错??
  • DataGrid分页出错!
  • 分页程序哪里出错了?
  • 急!自动分页出错,absolutepage不对
  • 求助,分页功能出错!
  • DataGrid分页出错!!!!!清高手指点!!!!
  • 分页出错的问题,怪事!
  • JAVABEAN分页出错 帮帮我
  • DataGrid分页删除出错(在线等)
  • 分页出错,请教一下!

关键词

得分解答快速导航

  • 帖主:guyong009
  • luckyprg
  • yichuan1982
  • luckyprg
  • tigerwen01
  • yichuan1982
  • yichuan1982
  • tomsoncat
  • ChengKing

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo