救命!datalist分页重新加载页面的问题

superkey007 2009-08-27 09:06:42
我做的页面是在产品分类的页面,在页面首次加载的时候显示第一个类别并分页,然后点击其他类别显示其他类别的内容,
并分页,可是当我在这个新类别中点击分页的时候,页面时从新加载的,也就是像第一次打开页面一样,又从新显示第一个类别的产品了。
所以我想问有什么方法可以实现分页不从新加载页面,且pagedatasouce类的属性值都从新设置的!
...全文
174 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
superkey007 2009-08-29
  • 打赏
  • 举报
回复
解决了!谢谢各位,尤其是zhangpei2009_job热心,还有youjei 的提示!
三楼の郎 2009-08-27
  • 打赏
  • 举报
回复
去检查"?CategoryID=" + qstr + "&page="这些语句里的qstr的值对不对吧
三楼の郎 2009-08-27
  • 打赏
  • 举报
回复
去检查"?CategoryID=" + qstr + "&page=0"这部分qstr的值对不对吧
flyerwing 2009-08-27
  • 打赏
  • 举报
回复
if(! page.isPostBack) 
{
....
}

很关键。
superkey007 2009-08-27
  • 打赏
  • 举报
回复
谢了!
zhangpei2009_job 2009-08-27
  • 打赏
  • 举报
回复
哎,我看完头都大了,
我之前都是,加载时声明ViewState["page"]=0;
点击上一页、下一页时取出page值,然后将值++或--,重新存入viewState
通过这样改变当前显示页的索引,重新绑定方法
你先加断点调调看,下午还没解决的话我给你段我之前写的分页代码,条理很清晰
libin344707 2009-08-27
  • 打赏
  • 举报
回复
学习
superkey007 2009-08-27
  • 打赏
  • 举报
回复

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SBindRe();
dltProduct.DataSource = pds();
dltProduct.DataBind();
}

}
//导航栏绑定
private void SBindRe()
{
string qstr = HttpContext.Current.Request.QueryString["CategoryID"].ToString();
SqlConnection sqlConn = new SqlConnection(constr);
SqlCommand sqlComm = new SqlCommand();
sqlComm.Connection = sqlConn;

//查询子类别,显示导航栏
sqlComm.CommandText = "select * from SecCategory where CategoryID=" + qstr;
SqlDataAdapter sqlAptS = new SqlDataAdapter(sqlComm);
DataSet dss = new DataSet();
sqlAptS.Fill(dss, "VSecCategory");
repSMenu.DataSource = dss.Tables["VSecCategory"].DefaultView;
repSMenu.DataBind();

}
//动态链接,
public void LinkButton_Click(Object sender, EventArgs e)
{
//我想一夜,别人一句话OK!
LinkButton tmpLbt = new LinkButton();
tmpLbt = ((LinkButton)sender);
Label1.Text = tmpLbt.Text;
SecCName = tmpLbt.Text.ToString();

//Click事件触发在DataList控件上绑定产品内容
dltProduct.DataSource = pds();
dltProduct.DataKeyField = "ProductID";
dltProduct.DataBind();
}

private PagedDataSource pds()
{
SqlConnection sqlConn = new SqlConnection(constr);
SqlCommand sqlComm = new SqlCommand();
sqlComm.Connection = sqlConn;
PagedDataSource pds = new PagedDataSource();

//1.首次加载页面,页面显示首子类产品内容
if (!IsPostBack)
{
//string qstr = HttpContext.Current.Request.QueryString["CategoryID"].ToString();
sqlComm.CommandText = "select SecCategoryID from SecCategory where CategoryID=" + qstr;
//返回子类表首条记录,首列即Id
sqlConn.Open();
string Id = (sqlComm.ExecuteScalar()).ToString();
SecCId = Id;

sqlConn.Close();
//根据SecCategoryID查询产品绑定到DataList控件
sqlComm.CommandText = "select * from Product where SecCategoryID=" + Id;
SqlDataAdapter sqlAptP = new SqlDataAdapter(sqlComm);
DataSet dsp = new DataSet();
sqlAptP.Fill(dsp, "VProduct");
//PagedDataSource pds = new PagedDataSource();
pds.DataSource = dsp.Tables["VProduct"].DefaultView;

}
//2.点击导航时根据导航显示产品信息

else
{
//根据SecCategory Name 查询出SecCategoryID
sqlComm.CommandText = "select SecCategoryID from SecCategory where Name='" + SecCName + "'";
sqlConn.Open();
string Id = (sqlComm.ExecuteScalar()).ToString();
SecCId = Id;

sqlConn.Close();
//根据SecCategoryID查询产品绑定到DataList控件
sqlComm.CommandText = "select * from Product where SecCategoryID=" + Id;
SqlDataAdapter sqlAptP = new SqlDataAdapter(sqlComm);
DataSet dsp = new DataSet();
sqlAptP.Fill(dsp, "VProduct");

//PagedDataSource pds = new PagedDataSource();
pds.DataSource = dsp.Tables["VProduct"].DefaultView;
}


//PagedDataSource属性设置
pds.AllowPaging = true;//允许分页
pds.PageSize = 2;//单页显示项数
pds.CurrentPageIndex = Convert.ToInt32(Request.QueryString["page"]);
return pds;
}
protected void dltProduct_ItemDataBound(object sender, DataListItemEventArgs e)
{
//限制在Datalist脚模板中查找
if (e.Item.ItemType == ListItemType.Footer)
{
DropDownList ddlp = (DropDownList)e.Item.FindControl("ddlp");

HyperLink lpfirst = (HyperLink)e.Item.FindControl("hlfir");
HyperLink lpprev = (HyperLink)e.Item.FindControl("hlp");
HyperLink lpnext = (HyperLink)e.Item.FindControl("hln");
HyperLink lplast = (HyperLink)e.Item.FindControl("hlla");

pds().CurrentPageIndex = ddlp.SelectedIndex;

int n = Convert.ToInt32(pds().PageCount);//n为分页数
int i = Convert.ToInt32(pds().CurrentPageIndex);//i为当前页索引

Label lblpc = (Label)e.Item.FindControl("lblpc");
lblpc.Text = n.ToString();
Label lblp = (Label)e.Item.FindControl("lblp");
lblp.Text = Convert.ToString(pds().CurrentPageIndex + 1);

//根据总页数加载DropList列表
if (!IsPostBack)
{
for (int j = 0; j < n; j++)
{
ddlp.Items.Add(Convert.ToString(j + 1));
}
}

if (i <= 0)//IsFirstPage
{
lpfirst.Enabled = false;
lpprev.Enabled = false;
lplast.Enabled = true;
lpnext.Enabled = true;
}
else
{
lpprev.NavigateUrl = Request.CurrentExecutionFilePath +"?CategoryID="+qstr+"&page=" + (i - 1);
}
if (i >= n - 1)//IsLastPage
{
lpfirst.Enabled = true;
lplast.Enabled = false;
lpnext.Enabled = false;
lpprev.Enabled = true;
}
else
{
// Request.CurrentExecutionFilePath为当前请求虚拟路径
lpnext.NavigateUrl = Request.CurrentExecutionFilePath + "?CategoryID=" + qstr + "&page=" + (i + 1);
}

lpfirst.NavigateUrl = Request.CurrentExecutionFilePath + "?CategoryID=" + qstr + "&page=0";//向本页传递参数page
lplast.NavigateUrl = Request.CurrentExecutionFilePath + "?CategoryID=" + qstr + "&page=" + (n - 1);

ddlp.SelectedIndex = Convert.ToInt32(pds().CurrentPageIndex);//更新下拉列表框中的当前选中页序号
}

三楼の郎 2009-08-27
  • 打赏
  • 举报
回复
如2楼所说,分类ID需要重新传一次!
zhangpei2009_job 2009-08-27
  • 打赏
  • 举报
回复
听着有点混,你代码多吗,给我来份
superkey007 2009-08-27
  • 打赏
  • 举报
回复
我觉得毛病是,我首次读取的是第一个分类的数据,以后读取的数据也正常,但分页的时候,页面就从新加载数据,就又从新执行if(! page.isPostBack)
{
....
}
中的内容,所以又显示第一类别的内容了,现在我就想明白,怎么新类别点分页时候,只显示这个类别的下一页,而不是第一次加载的类别的下一页
me_child 2009-08-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhangpei2009_job 的回复:]
PageLoad加载事件中写下面代码了吗?
if(! page.isPostBack)
{
  ....
}
可能是回传的原因

[/Quote]


ai... 正解
zhangpei2009_job 2009-08-27
  • 打赏
  • 举报
回复
PageLoad加载事件中写下面代码了吗?
if(! page.isPostBack)
{
....
}
可能是回传的原因
superkey007 2009-08-27
  • 打赏
  • 举报
回复
我现在又点迷糊了,我把程序给你,你帮我看下,行不行?
yanglei6979431 2009-08-27
  • 打赏
  • 举报
回复
设置断点 然后按照你的思路
看看语句的顺序是不是你的思路的顺序
按照你这样说 那肯定是不是啦 你自己看看
飞一龙 2009-08-27
  • 打赏
  • 举报
回复
wg例如:product.aspx?分类ID=值&page=n
再去根据分类ID和page查找数据
就不会有问题了
飞一龙 2009-08-27
  • 打赏
  • 举报
回复
你没有记住分类ID,进行分页了
superkey007 2009-08-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 youjei 的回复:]
wg例如:product.aspx?分类ID=值&page=n
再去根据分类ID和page查找数据
就不会有问题了
[/Quote]
我觉得这个想法符合我的这个问题,能不能给个例子?
zhangpei2009_job 2009-08-27
  • 打赏
  • 举报
回复
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
ViewState["Page"] = 0;
Databind(); //传int.parse(request.QueryString["cateId"])
}
}



public void Databind() //加参int categoryid
{
PagedDataSource pds = new PagedDataSource();
pds.DataSource = BookManager.GETPartBook(); //传参categoryid
pds.AllowPaging = true;
pds.PageSize = 5;
pds.CurrentPageIndex =int.Parse(ViewState["Page"].ToString());

//Label5.Text = "第"+(pds.CurrentPageIndex+1)+"页,共"+pds.PageCount+"页";

SetEnabled(pds);
DataList1.DataSource = pds;
DataList1.DataBind();
}

private void SetEnabled(PagedDataSource pds) //第1页时“上一页”按钮不可编辑,当前为最后一页时[下1页]不可编辑
{
Button1.Enabled = true;
Button2.Enabled = true;

if(pds.IsFirstPage)
{
Button1.Enabled = false;
}
if(pds.IsLastPage)
{
Button2.Enabled = false;
}
}

protected void Button1_Click(object sender, EventArgs e) //上一页
{
int value = int.Parse(ViewState["Page"].ToString());
ViewState["Page"] = --value ;
Databind();
}

protected void Button2_Click(object sender, EventArgs e) //下一页
{
int value = int.Parse(ViewState["Page"].ToString());
ViewState["Page"] = ++value;
Databind();
}

我之前那没参,看看吧

62,266

社区成员

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

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

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

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