急!新手散80分向各位高手求教一个关于查询结果分页的问题!在线等待中~~~
我的查询分页中,有下面几项:
记录总数【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"是哪部分的属性),其它的属性我都是按自己的改过来的,结果始终不能实现要求(执行搜索结果时,就算结果总数不为零,即有结果时,却出来提示“没有你搜索的结果 ”,而且绑定结果的显示无效,上下页的翻页也不能工作,我找了很久,不晓得出了什么问题)急死我了,毕设都卡在这里了,没办法,只有高分请教各位高手了,谢谢了!在线等~~