我在做一个查询分页时,遇到了一个问题,就是我的“上一页”,“下一页”“首页”,“尾页”都没起作用,也就是说我的查询结果总数都是对的,可以显示当前页,但是就是翻页不成功,我看了很久代码,还是不清楚哪里出了错,我之前也求过贴,但是经过我的整理,我现在的问题更清晰些了,下面是我的部分代码:(我是用repeater控件做绑定的,SerchKey是我输入的查询关键字)
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();
}
else
{
//搜索字符串为空时,不进行搜索,直接显示提示信息
ResultNull.Visible =true;
ResultNull.Text="没有你搜索的结果!";
}
}
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{ countnum.Text="";
nowpage.Text="";
allpage.Text="";
if(Request.QueryString["input"]!=null){SerchKey = Request.QueryString["input"].ToString();}
ResultNull.Visible=false;
Result.Visible=true;
int SearchNum=0;//查询到的总记录
int PageCount=0;//页数
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()+"";//总共页数
nowpage.Text=(CurrentPage+1).ToString()+"";//当前页码 if(PageCount==0)
{ ResultNull.Visible = true;
ResultNull.Text="没有你搜索的结果";
Result.Visible = false;countnum.Text="0";allpage.Text="0";nowpage.Text="0";
nowpage.Text=CurrentPage.ToString()+"";//当前页码
}
else
{
Result.Visible=true;
ResultNull.Visible = false;} //设置页码可见性
pagesizelabel.Text=PageSize.ToString();
DataRepeatBind();
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;} }
if(SerchKey.Trim()==""){countnum.Text="0";allpage.Text="0";nowpage.Text="0";Result.Visible=false;ResultNull.Visible=true;}
}
}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()+"";//重新绑定当前页码
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;}
}
}我个人始终觉得错在PageCut_Click分页事件上,我的CommandArgument都设置了,但是当触发分页时,感觉分页得到的CurrentCount没有传到DataRepeatBind()中,或是分页事件中调DataRepeatBind()时,绑定里面没有实现分页,我的分页代码全在上面的代码段里了,我实在不晓得要怎么改?
各位高手帮帮小弟吧!把我的100分全给你们吧,先谢过了!
在线等~~
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();
}
else
{
//搜索字符串为空时,不进行搜索,直接显示提示信息
ResultNull.Visible =true;
ResultNull.Text="没有你搜索的结果!";
}
}
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{ countnum.Text="";
nowpage.Text="";
allpage.Text="";
if(Request.QueryString["input"]!=null){SerchKey = Request.QueryString["input"].ToString();}
ResultNull.Visible=false;
Result.Visible=true;
int SearchNum=0;//查询到的总记录
int PageCount=0;//页数
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()+"";//总共页数
nowpage.Text=(CurrentPage+1).ToString()+"";//当前页码 if(PageCount==0)
{ ResultNull.Visible = true;
ResultNull.Text="没有你搜索的结果";
Result.Visible = false;countnum.Text="0";allpage.Text="0";nowpage.Text="0";
nowpage.Text=CurrentPage.ToString()+"";//当前页码
}
else
{
Result.Visible=true;
ResultNull.Visible = false;} //设置页码可见性
pagesizelabel.Text=PageSize.ToString();
DataRepeatBind();
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;} }
if(SerchKey.Trim()==""){countnum.Text="0";allpage.Text="0";nowpage.Text="0";Result.Visible=false;ResultNull.Visible=true;}
}
}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()+"";//重新绑定当前页码
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;}
}
}我个人始终觉得错在PageCut_Click分页事件上,我的CommandArgument都设置了,但是当触发分页时,感觉分页得到的CurrentCount没有传到DataRepeatBind()中,或是分页事件中调DataRepeatBind()时,绑定里面没有实现分页,我的分页代码全在上面的代码段里了,我实在不晓得要怎么改?
各位高手帮帮小弟吧!把我的100分全给你们吧,先谢过了!
在线等~~
翻页的时候出现了下面问题-10 的 StartRecord 值无效;该值必须大于等于 0。参数名: startRecord 我觉得是我的初始化参数时,private int CurrentPage;//当前页
没赋值的问题,后来把它初始化为0以后还是出现这样的问题,这是怎么回事啊?
大家帮帮我吧!
Public int CurrentPageIndex {
get {
object o = ViewState["CurrentPageIndex"];
if(o != null){
return int.Parse(o);
}
return -1;
}
set{
ViewState["CurrentPageIndex"] = value; }
}
repeater.currentgageIndex = e.NextpageIndex;
DataRepeatBind();
就ok!老
objPds.DataSource = DS.Tables[0].DefaultView;
objPds.AllowPaging = true;
objPds.PageSize = 5;
Label2.Text ="总共有:" + objPds.PageCount.ToString() + "页";
int CurPage;
//当前页面从Page查询参数获取
if (Request.QueryString["Page"] != null)
CurPage=Convert.ToInt32(Request.QueryString["Page"]);
else
CurPage=1; objPds.CurrentPageIndex = CurPage-1;
Label1.Text = "当前第 " + CurPage.ToString() + "页";
if (!objPds.IsFirstPage)
Link1.NavigateUrl=Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage-1); if (!objPds.IsLastPage)
Link2.NavigateUrl=Request.CurrentExecutionFilePath+ "?Page=" + Convert.ToString(CurPage+1); //把PagedDataSource 对象赋给Repeater控件
Repeater1.DataSource=objPds;
Repeater1.DataBind();
////////////////////////////////////////////////////////////////////这个就是一个使用repeater的完整代码,你看看应该对你用帮助的哈
我按上面的把CurrentPage(当前页)和StartIndex(起始下标)(不晓得还漏了什么分页变量没有)初始化了
public int CurrentPage
{
get
{
if(ViewState[ "CurrentPage "]==null)
{
ViewState[ "CurrentPage "]=1;
}
return (int)ViewState[ "CurrentPage "];
}
set
{
ViewState[ "CurrentPage "]=value;
}
}
我用一个两页的分页结果实验,
但是还是有问题:当ViewState[ "CurrentPage"]=-1时,立马报错“-10 的 StartRecord 值无效;该值必须大于等于 0。参数名: startRecord ”
当ViewState[ "CurrentPage"]=0时 ,当前第一页可以显示,但是按下一页时,错误就变成了“Fill: SelectCommand.Connection 属性尚未初始化。”(我记得我已经初始化了的)
当ViewState[ "CurrentPage"]=1时,查询,首先出来的是第二页结果,“上一页”没出来,按”下一页“时,报错“Fill: SelectCommand.Connection 属性尚未初始化。”
我真的是不晓得怎么办了?急死我了,昨天都搞了一天了,现在还没搞定,大家帮帮我吧
先谢谢你帮我,我在repeater中没有找到pageIndexchange事件,好像只有DataGrid中有吧,
按照你后来贴的代码来的话,我的程序挥改动很大,因为我这是在做毕设,时间很紧,就差分页这一块了,我实在是不想大改,我现在把我的代码发到你邮箱去了,
是[email protected]?应该是hotmail吧,希望你能抽空帮我看看!
再次谢过了!
不过这种问题我也遇到不少。
原因有:一是未绑定;
二是从数据库取得全部数据的数量时出现问题;
三是响应未成功。
另外,分页时,repeater中没有pageIndexchange事件,所以DataGrid的方法不能用。
建议用分页控件,推荐一个AspNetPager,很好用。
呵呵,你那边回应还真快啊,我给了你那两个数据库可以用啊,你直接用附加数据库导入应该就可以用了,
我刚才又调了一遍还是那个问题 “-10 的 StartRecord 值无效;该值必须大于等于 0。参数名: startRecord ”,我都快疯掉了!
只要能搞定,呵呵,分数不是问题,反正我是个新手,分不多,分有多少给你多少吧,如果你在武汉的话,请你吃饭都没问题啊!