急!100分再问一个!IsPostBack翻页的问题?
我的问题是在页面上有5个控件:
一个TextBox1,
一个Button1,
一个DataList1,
两个HyperLink(上一页,下一页)
我想在文本框中输入一个搜索关键字,点按钮把结果查询到DataList1中,
另外可以翻页.
Button1_Click事件如下:
protected void Button1_Click(object sender, EventArgs e)
{
string keyword = TextBox1.Text;
string sql="select * from t1 where aa='"+keyword+"'";
band(keyword); //绑定并包含有翻页
}
band()方法如下:
private void bandd(string KeyWord)
{
//省略部分代码
if (!pages.IsFirstPage)
{
hpl_prev.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + Convert.ToString(indexpage - 1); //上一页
}
if (!pages.IsLastPage)
{
hpl_next.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + Convert.ToString(indexpage + 1); //下一页
}
//省略下面代码
}
运行时查询结果出来了,但点击下一页时就没有数据了!
请问怎么解决?分不够再加
[解决办法]
点击翻页事件中,还要绑—ataList1才行
[解决办法]
HyperLink 的代码贴出来看看,绑定datalist没
[解决办法]
datalist翻页
- C# code
/// <summary> /// DataList翻页程序 /// </summary> private void DisplayBySection() { this.dlDoctor.Dispose(); string SectionID = Request.Params.Get("SectionID"); string strSectionID; if(SectionID!=null) { strSectionID = "select * from Doctors,Sections,BigSections,DoctorType "+ "where Sections.BigSectionID = BigSections.BigSectionID and Sections.SectionID = Doctors.SectionID "+ "and Doctors.DoctorTypeID = DoctorType.DoctorTypeID and DoctorType.DoctorTypeName='祖传医师'"+ "and Doctors.SectionID = '"+SectionID+"'"; } else { strSectionID = "select * from Doctors,Sections,BigSections,DoctorType "+ "where Doctors.SectionID = Sections.SectionID and BigSections.BigSectionID = Sections.BigSectionID and "+ "Doctors.DoctorTypeID=DoctorType.DoctorTypeID and DoctorType.DoctorTypeName='祖传医师' order by DoctorID"; } this.dlDoctor.Dispose(); try { DataSet dsDoctor = PubClass.DbOperate.ExecuteSqlDataAdapter(strSectionID); //使用页面内置的数据源PagedDataSource(具有翻页功能) PagedDataSource objPage = new PagedDataSource(); objPage.DataSource = dsDoctor.Tables[0].DefaultView; objPage.AllowPaging =true; objPage.PageSize = 9; int curPage; if(Request.QueryString["Page"]!=null) { curPage = Int32.Parse(Request.QueryString["Page"].ToString()) ; } else { curPage = 1; } objPage.CurrentPageIndex = curPage -1; //lblCurPage为显示当前页的Lable控件 lblCurPage.Text = "当前页: 第"+curPage.ToString()+"页"; if(!objPage.IsFirstPage) { this.lnkPrev.NavigateUrl = Request.CurrentExecutionFilePath+"?Page="+Convert.ToString(curPage-1); } if(!objPage.IsLastPage) { this.lnkNext.NavigateUrl = Request.CurrentExecutionFilePath+"?Page="+Convert.ToString(curPage+1); } this.dlDoctor.DataSource = objPage; this.dlDoctor.DataBind(); } catch(Exception Err) { Response.Write(PubClass.CommonTool.PopShow(Err.Message)); } }
[解决办法]
翻页再一次邦—ataList1
[解决办法]
点击下一页需要重新绑定数据
[解决办法]
- C# code
DataList翻页2008-01-09 14:27protected System.Data.SqlClient.SqlConnection sqlConnection1 = new System.Data.SqlClient.SqlConnection();protected System.Data.SqlClient.SqlCommand sqlCommand1 = new System.Data.SqlClient.SqlCommand();protected System.Data.SqlClient.SqlDataReader sqlDataReader1;protected System.Data.DataSet dataSet1;protected System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1;private void Page_Load(object sender, System.EventArgs e){sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter("select * from db","Data Source=.; Initial Catalog=db;User id=sa; pwd=sa"); dataSet1 = new DataSet(); sqlDataAdapter1.Fill(dataSet1); PagedDataSource pds = new PagedDataSource(); pds.DataSource = dataSet1.Tables[0].DefaultView; pds.AllowPaging = true; pds.PageSize = 10; int CurPage1=1; pds.CurrentPageIndex = CurPage1 - 1; DIV1.InnerHtml = "当前页:第 " + CurPage1.ToString() + " 页 ,共 " + pds.PageCount + " 页"; if (!pds.IsFirstPage) { Prv.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage1 - 1); Top.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=1"; } if (!pds.IsLastPage) { Dow.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage1 + 1); Bot.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + pds.PageCount; } DataList1.DataSource = pds; DataList1.DataBind();}
[解决办法]
刚才没注意看,楼主下一页写成了URL形式,直接重新加载页面了,相当于本页重新刷新
hpl_next.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + Convert.ToString(indexpage + 1);
贴出你page_load的代码看看
[解决办法]
这个问题是由于ViewState引起的:
当Button1按下的时候,你的代码调用Band()方法绑定了数据,这个过程关键字是保存在ViewState里的,但是你通过HyperLink产生的链接定位到下一页的时候,相当于重新载入了页面进入初始状态(也就是IsPostedBack==false),所以先前的状态就丢失了,回到了没有进行任何搜索的状态,也就不会显示任何东西了。解决的方案有两种:
1)把Keyword一起在URL中传出:
Button1_Click事件如下:
protected void Button1_Click(object sender, EventArgs e)
{
string keyword = TextBox1.Text;
string sql="select * from t1 where aa='"+keyword+"'";
band(keyword); //绑定并包含有翻页
}
band()方法如下:
private void bandd(string KeyWord)
{
//省略部分代码
if (!pages.IsFirstPage)
{
// hpl_prev.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + Convert.ToString(indexpage - 1); //上一页
hpl_prev.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + Convert.ToString(indexpage - 1) + "&kw="+keyword; //上一页
}
if (!pages.IsLastPage)
{
// hpl_next.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + Convert.ToString(indexpage + 1); //下一页
hpl_next.NavigateUrl = Request.CurrentExecutionFilePath + "?page=" + Convert.ToString(indexpage + 1) + "&kw="+keyword; //下一页
}
//省略下面代码
}
void override OnLoad(EventArgs e){
// 这里需要添加更多的验证逻辑...
if(Request.QueryString["kw"] != null){
Band(Request.QueryString["kw"];
}
}
2)用LinkButton代替HyperLink,把页码存到CommandArgument中,实现代码片段为:
protected LinkButton lb_prev;
protected LinkButton lb_next;
// ...
lb_prev.Click += new EventHandler(lb_prev_Click);
lb_next.Click += new EventHandler(lb_next_Click);
// ...
void lb_prev_Click(object sender, EventArgs e){
int curPage = Convert.ToInt32(lb_prev.CommandArgument);
// ...
}
void lb_next_Click(object sender, EventArgs e){
// ...
}
private void bandd(string KeyWord)
{
//省略部分代码
if (!pages.IsFirstPage)
{
lb_prev.CommandArgument = 1;
}
if (!pages.IsLastPage)
{
lb_next.CommandArgument = PageCount;
}
//省略下面代码
}