我的查询分页中,有下面四项:记录总数【countnum】  当前页:【nowpage】/ 【allpage】  每页【pagesizelabel】条   我是把每页显示定为10条,在数据库中输了12条查询结果,本来应该是页总数为2,当前页为1,但运行程序时,记录总数是对的,当前页一直显示为“-1”,“下一页”没有实现成功,因而“上一页”也无从认证是否成功,我只是想让这样运行时,可以时当前页显示为“1”,而不是“-1”,另外“上一页”“下一页”可以实现,我始终不晓得错在哪里,下面是我的分页代码:
.....
.....
private int  CurrentPage;//当前页
private int  PageSize=10;//每页的记录数
private int PageCount;//总页数
protected System.Web.UI.WebControls.Label countnum;
protected System.Web.UI.WebControls.Label pagesizelabel;
protected System.Web.UI.WebControls.LinkButton prepage;
protected System.Web.UI.WebControls.LinkButton nextpage;
protected System.Web.UI.WebControls.Label nowpage;
protected System.Web.UI.WebControls.Label allpage public void DataRepeatBind()
{
string MySql="";
int  StartIndex;//起始下标
StartIndex=CurrentPage*PageSize;
MySql=......
.............//查询的sql代码
         SqlDataAdapter MyAdapter=new SqlDataAdapter(MySql,conn);
DataSet ds=new DataSet();
MyAdapter.Fill(ds,StartIndex,PageSize,"Users");
Result.DataSource=ds.Tables["Users"].DefaultView;
Result.DataBind();
prepage.Enabled=true;
nextpage.Enabled=true;
if(CurrentPage>=PageCount-1)
nextpage.Enabled=false;
else if(CurrentPage==0)
prepage.Enabled=false;
CurrentPage=CurrentPage-1;
nowpage.Text=CurrentPage.ToString();
}
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!IsPostBack)
{   
//下面一段代码是用于接收传值并在textbox中显示
SerchKey=Request.QueryString["input"];
city=Request.QueryString["incity"];
Label2.Text=city;
TextBox1.Text=SerchKey;
TextBox2.Text=city;
          
//下面代码是查询分页代码
int SearchNum=0;//查询到的总记录
int PageCount=0;//页数
string MySql="";
                            MySql=.....//搜索的sql语句
                                        
string strcon=ConfigurationSettings.AppSettings["dsn"];
conn=new SqlConnection(strcon);
SqlCommand cmd=new SqlCommand();
cmd.CommandText=MySql;
SqlParameter parm=cmd.Parameters.Add("@keyword",DbType.String);
parm.Value="%"+SerchKey+"%";
cmd.Connection=conn;
conn.Open();

SqlDataReader dr=cmd.ExecuteReader();
while(dr.Read())
{
SearchNum++;
}
dr.Close();
countnum.Text=SearchNum.ToString();
if(SearchNum%PageSize==0)
    PageCount=SearchNum/PageSize;
else
   PageCount=SearchNum/PageSize+1;
allpage.Text=PageCount.ToString();
pagesizelabel.Text=PageSize.ToString();
DataRepeatBind();

}
}
望大伙帮帮忙!感激不尽!

解决方案 »

  1.   

    private int  CurrentPage;//当前页 初始值默认为0
    在 DataRepeatBind()里面执行了CurrentPage=CurrentPage-1;(这一句不懂你干什么??)
    所以载入页面后CurrentPage肯定是-1;
    --------
    另外,你在定义CurrentPage的时候,无论你是否!IsPostBack,它都会初始化为0
    所以你的当前页就不会变了
    应该用ViewState去定义当前页变量
    如:
    int CurrentPage
    {
         get
         {
            if(ViewState["currentPage"]==null)
            {
               ViewState["currentPage"]=1;
             }
            return (int)ViewState["currentPage"];
         }
         set
         {
              ViewState["currentPage"]=value;
         }
    }
      

  2.   

    To aspdotnet2005:
    我按照你上面说的试了,当前页的问题到是解决了,但是页面的搜索结果绑定显示都出不来了,另外,上一页和下一页的问题还是没有解决,不过还是谢谢的你回贴!To Ly105(等待) :
    我因为学ASP.NET没几天,主要是为了毕设,很多问题都不晓得怎么解决,这个分页是同学发给我的,我直接用上了,所有的分页代码都在上面贴出来了,看了你的回贴,我想你说的很对,应该是没有写分页事件,我借的书本上的实例都是DATAGRID控件的分页,而我这边是用的Repeater控件分页,我把那边的分页事件代码加上去了,还是不行,你有没时间帮我调整一下代码啊?谢谢了!
    下面是我后来加进去的分页事件代码:
    private void PageCut_Click(object sender,System.EventArgs e)
    {
    //通过控件的CommandArgument参数获取是那个控件】
    String commangArg = ((LinkButton)sender).CommandArgument;
    switch(commangArg)
    {
    case "First": {CurrentPage=0;break;}
    case "Prev": {CurrentPage=(int)Math.Max(0,CurrentPage-1);break;}
    case "Next":  {
    CurrentPage=(int)Math.Min(PageCount-1,CurrentPage+1);break;
    case "Last":{CurrentPage=PageCount-1;break;}
    default:{break;}
                               }
    DataRepeatBind();
    nowpage.Text=(CurrentPage+1).ToString()+"";//重新绑定当前页码
    IsFirstLastPage();
    }
    private void IsFirstLastPage()
    {
    if(0<PageCount)
    {   if(PageCount!=1)
           { if(CurrentPage==0){prepage.Visible=false;}
    else{prepage.Visible= true;}
             if(CurrentPage==PageCount-1) {prepage.Visible=false;}         else{nextpage.Visible= true;}
    }
        else{
    PageFirst.Visible=false;PageLast.Visible=false;nextpage.Visible=false;prepage.Visible=false;} }
    }
      

  3.   

    To aspdotnet2005:
    我按照你上面说的试了,当前页的问题到是解决了,但是页面的搜索结果绑定显示都出不来了,另外,上一页和下一页的问题还是没有解决,不过还是谢谢的你回贴!To Ly105(等待) :
    我因为学ASP.NET没几天,主要是为了毕设,很多问题都不晓得怎么解决,这个分页是同学发给我的,我直接用上了,所有的分页代码都在上面贴出来了,看了你的回贴,我想你说的很对,应该是没有写分页事件,我借的书本上的实例都是DATAGRID控件的分页,而我这边是用的Repeater控件分页,我把那边的分页事件代码加上去了,还是不行,你有没时间帮我调整一下代码啊?谢谢了!
    下面是我后来加进去的分页事件代码:
    private void PageCut_Click(object sender,System.EventArgs e)
    {
    //通过控件的CommandArgument参数获取是那个控件】
    String commangArg = ((LinkButton)sender).CommandArgument;
    switch(commangArg)
    {
    case "First": {CurrentPage=0;break;}
    case "Prev": {CurrentPage=(int)Math.Max(0,CurrentPage-1);break;}
    case "Next":  {
    CurrentPage=(int)Math.Min(PageCount-1,CurrentPage+1);break;
    case "Last":{CurrentPage=PageCount-1;break;}
    default:{break;}
                               }
    DataRepeatBind();
    nowpage.Text=(CurrentPage+1).ToString()+"";//重新绑定当前页码
    IsFirstLastPage();
    }
    private void IsFirstLastPage()
    {
    if(0<PageCount)
    {   if(PageCount!=1)
           { if(CurrentPage==0){prepage.Visible=false;}
    else{prepage.Visible= true;}
             if(CurrentPage==PageCount-1) {prepage.Visible=false;}         else{nextpage.Visible= true;}
    }
        else{
    PageFirst.Visible=false;PageLast.Visible=false;nextpage.Visible=false;prepage.Visible=false;} }
    }
      

  4.   

    public class WebForm1 : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.DataGrid DataGrid1;
    protected System.Web.UI.WebControls.Button Button1;
    protected System.Web.UI.WebControls.Button Button2;
    protected System.Web.UI.WebControls.Label Label1;
    protected System.Web.UI.WebControls.Label Label2;
    protected System.Web.UI.WebControls.Label Label3;
    protected System.Web.UI.WebControls.Label Label4;
    protected System.Web.UI.WebControls.DropDownList DropDownList1;
    protected System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1;
    protected System.Data.SqlClient.SqlCommand sqlSelectCommand1;
    protected System.Data.SqlClient.SqlCommand sqlInsertCommand1;
    protected System.Data.SqlClient.SqlCommand sqlUpdateCommand1;
    protected System.Data.SqlClient.SqlCommand sqlDeleteCommand1;
    protected System.Data.SqlClient.SqlConnection sqlConnection1;
    protected System.Data.SqlClient.SqlCommand sqlCommand1;
    protected WebApplication7.DataSet1 dataSet11;
    private void MyBackData()
    {
    this.sqlDataAdapter1.Fill(dataSet11,"employeeInfo");
    this.DataGrid1.DataBind();
    }
    private void Page_Load(object sender, System.EventArgs e)
    {
    if(!IsPostBack)
    {
    int n=this.sqlDataAdapter1.Fill(dataSet11,"employeeInfo");// 在此处放置用户代码以初始化页面
    this.DataGrid1.DataBind();
    if(n!=0)
    {
    int m=this.DataGrid1.PageCount;
    this.Label1.Text="共"+n.ToString()+"条记录";
    this.Label2.Text="共"+m.ToString()+"页";
    this.DataGrid1.CurrentPageIndex=0;
    for(int i=1; i<=m;i++)
    this.DropDownList1.Items.Add(i.ToString());
    this.Button1.Enabled=false;
    if(m==1)
    {
    this.Button2.Enabled=false;
    }
    else
    {
    this.Button2.Enabled=true;
    }
    }
    else
    {
    this.Button2.Visible=false;
    this.Button1.Visible=false;
    this.DropDownList1.Visible=false;
    this.Label1.Visible=false;
    this.Label2.Visible=false;
    this.Label3.Visible=false;
    this.Label4.Visible=false;
    }// 在此处放置用户代码以初始化页面
    }
    }
      

  5.   

    private void Button1_Click(object sender, System.EventArgs e)
    {
    this.DataGrid1.CurrentPageIndex--;
    this.DropDownList1.SelectedIndex=this.DataGrid1.CurrentPageIndex;
    this.Button2 .Enabled=true;
    if(this.DataGrid1.CurrentPageIndex==0)
    {
    this.Button1.Enabled=false;
    this.MyBackData();
    }
    } private void Button2_Click(object sender, System.EventArgs e)
    {
    this.DataGrid1.CurrentPageIndex++;
    this.DropDownList1.SelectedIndex=this.DataGrid1.CurrentPageIndex;
    this.Button1 .Enabled=true;
    if(this.DataGrid1.CurrentPageIndex==this.DataGrid1.PageCount-1)
    {
    this.Button2.Enabled=false;
    this.MyBackData();
    }
    } private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    int n=this.DropDownList1.SelectedIndex;
    this.DataGrid1.CurrentPageIndex=n;
    if(n==0)
    {
    this.Button1.Enabled=false;
    this.Button2.Enabled=true;
    }
    else
    {
    if(n==this.DataGrid1.PageCount-1)
    {
    this.Button2.Enabled=false;
    this.Button1.Enabled=true;
    }
    else
    {
    this.Button1.Enabled=true;
    this.Button2.Enabled=true;
    }
    this.MyBackData();
    }
    }
    }
      

  6.   

    先谢谢CCjian(默契)了 !
    我的那个问题已经解决了,主要是用ViewState存储ResultCurrentPage过程中没有处理好,因为这两天有事情,一直没有上来,望见谅!
    不过还是要感谢楼上各位特别是CCjian(默契)的耐心帮助!
    我这就结贴!
    谢谢大家了!