• 全部
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

急!新手散80分向各位高手求教一个关于查询结果分页的问题!在线等待中~~~

heropeak 2006-05-28 09:00:03
我的查询分页中,有下面几项:

记录总数【countnum】 当前页:【nowpage】/ 【allpage】 每页【pagesizelabel】条
首页(firstpage) 上一页(prepage) 下一页(nextpage) 尾页(lastpage)

下面是我的代码:
.......
private string SerchKey;//搜索的关键字
private int CurrentPage;//当前页
private int PageSize=10;//每页的记录数
private int PageCount;
protected System.Web.UI.WebControls.Repeater Result;
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;
protected System.Web.UI.WebControls.Label ResultNull;
protected System.Web.UI.WebControls.LinkButton lastpage;
protected System.Web.UI.WebControls.LinkButton firstpage;
SqlConnection conn;
//数据绑定
public void DataRepeatBind()
{
if(SerchKey.Trim()!="")
{
int StartIndex;//起始下标
StartIndex=CurrentPage*PageSize;
string 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();
if(PageCount==0)
{
ResultNull.Visible = true;ResultNull.Text="没有你搜索的结果";
Result.Visible = false;//Result为repeater控件的id
}
else{ Result.Visible=true;} //设置页码可见性
}
else
{
//搜索字符串为空时,不进行搜索,直接显示提示信息
ResultNull.Visible =true;
ResultNull.Text="没有你搜索的结果!";
}
}

private void Page_Load(object sender, System.EventArgs e)
{ // 在此处放置用户代码以初始化页面
if(Request.QueryString["input"]!=null){SerchKey = Request.QueryString["input"].ToString();}
ResultNull.Visible=false;
if(!Page.IsPostBack)
{
int SearchNum=0;//查询到的总记录
int PageCount=0;//页数
SerchKey=Request.Params["input"];
string MySql==...//搜索的sql表达式
string strconn=ConfigurationSettings.AppSettings["dsn"];
conn=new SqlConnection(strconn);
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();
allpage.Text =PageCount.ToString()+"";//总共页数
nowpage.Text=(CurrentPage+1).ToString()+"";//当前页码
IsFirstLastPage();
if(SerchKey.Trim()==""){Result.Visible=false;}
}

}

private void PageCut_Click(object sender,System.EventArgs e)//分页事件
{
//通过控件的CommandArgument参数获取是那个控件】
String commangArg = ((LinkButton)sender).CommandArgument;
switch(commangArg){
case "First": {CurrentPage=0;break;}
case "Pre": {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{firstpage.Visible=false;lastpage.Visible=false;nextpage.Visible=false;prepage.Visible=false;}

}
}

我学ASP.NET没几天,很多都不懂,因而里面有些代码是我直接从一些实例书上转过来,自己修改了一下属性,里面分页事件中的case条件(如case "First",我始终不晓得"First"是哪部分的属性),其它的属性我都是按自己的改过来的,结果始终不能实现要求(执行搜索结果时,就算结果总数不为零,即有结果时,却出来提示“没有你搜索的结果 ”,而且绑定结果的显示无效,上下页的翻页也不能工作,我找了很久,不晓得出了什么问题)急死我了,毕设都卡在这里了,没办法,只有高分请教各位高手了,谢谢了!在线等~~
...全文
113 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
heropeak 2006-06-05
我的问题已经解决了,主要是用viewstate存储当前页时出了问题,
我还是把分散了吧,谢谢大家了!
回复
First应该是 你的按钮控件的 CommandArgument
String commangArg = ((LinkButton)sender).CommandArgument;
case "First": {CurrentPage=0;break;}


不过用webDiyer这个分页控件吧,蛮好用的,呵呵


回复
heropeak 2006-05-29
楼上说的都有道理,但是我现在时间很紧,根本没有那么多时间,而且我这边用的是vs2003的,
我只是希望大伙能帮帮我找找这里哪里错了?
我刚才又试了一下,发现private void Page_Load的PageCount好像没有传进public void DataRepeatBind()中,里面的
if(PageCount==0)
{
ResultNull.Visible = true;ResultNull.Text="没有你搜索的结果";
Result.Visible = false;//Result为repeater控件的id
}始终判断为真,这是为什么啊?
回复
ztwz 2006-05-29
顶一下。同意楼上!
要不在vs2005里拖几个控件就搞定了,分页排序。都不用写一行代码!
回复
winner2050 2006-05-29
建议不要用**分页控件。这种是解放大脑,不解放双手的做法。

你现在还是学基础,正如刚刚开始学数学就用计算器一样。
回复
singlepine 2006-05-28
http://singlepine.cnblogs.com/articles/281425.html
回复
相关推荐
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2006-05-28 09:00
社区公告
暂无公告