急!散50求解一个关于查询结果分页的问题!(我的“下一页”不能工作,不晓得错在哪里)望高手们帮帮忙!在线等~~~~

heropeakf1 2006-05-28 04:52:35
我的查询分页中,有下面四项:

记录总数【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();

}
}
望大伙帮帮忙!感激不尽!
...全文
106 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
CCjian 2006-06-05
  • 打赏
  • 举报
回复
呵呵,不要客气
heropeakf1 2006-06-05
  • 打赏
  • 举报
回复
先谢谢CCjian(默契)了 !
我的那个问题已经解决了,主要是用ViewState存储ResultCurrentPage过程中没有处理好,因为这两天有事情,一直没有上来,望见谅!
不过还是要感谢楼上各位特别是CCjian(默契)的耐心帮助!
我这就结贴!
谢谢大家了!
CCjian 2006-06-03
  • 打赏
  • 举报
回复
LZ用其他方法,道理是一样的,只要改为自己的,就行了
CCjian 2006-06-03
  • 打赏
  • 举报
回复
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();
}
}
}
CCjian 2006-06-03
  • 打赏
  • 举报
回复
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;
}// 在此处放置用户代码以初始化页面
}
}
heropeakf1 2006-05-28
  • 打赏
  • 举报
回复
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;}

}
}
heropeakf1 2006-05-28
  • 打赏
  • 举报
回复
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;}

}
}
aspdotnet2005 2006-05-28
  • 打赏
  • 举报
回复
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;
}
}
Ly105 2006-05-28
  • 打赏
  • 举报
回复
申明了 分页事件了吗?

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧