当前位置:首页
开发技术指南» 文章正文
    引言:

    摘要: 最好用api不用mfc ......
 ·tomcat559怎么把端口从8080改到80    »显示摘要«
    摘要: 本人整在学servlet和jsp 装的是tomcat559 没装过iis 为了测试程序方便想要把默认的8080端口改为80端口,希望大虾可以帮帮忙 在conf\server.xml里找到的 <!-- define a non-ssl http/1.1 connector on port 8080 --> <connector port="8080" m......


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

一、问题描述:  
          当查询出来的数据超过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;//  
  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;//  
   
   
  请问应该怎么修改?  
 

NO.1   作者: luckyprg

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

NO.2   作者: yichuan1982

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;  
  }

NO.3   作者: luckyprg

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

NO.4   作者: tigerwen01

参考例子来修改:  
   
  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  
  }  
  }  
   
 

NO.5   作者: yichuan1982

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

NO.6   作者: yichuan1982

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

NO.7   作者: tomsoncat

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

NO.8   作者: ChengKing

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


    摘要: 我用汇编实现了一个在vc里声明的函数,并用tasm编译成obj文件放到console工程里面去,但却build不了.出现以下信息: .\123.obj : warning lnk4033: converting object format from omf to coff test.obj : error lnk2001: unresolved external symbol "......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE