ASPNETPAGER分页时遇到的问题

yaotomo 2013-04-28 05:54:47
当按条件查询的时候,点下一页的话查询条件就会还原到默认的值
网上的解决方法是用UpdatePanel,我不想用ASP.NETAjax的UpdatePanel解决。也不想重新用Ajax分页。
在AspNetPager里有没有相关的设置可以解决这个问题呢?

我的代码

private void DataInit(string query)
{
DataTable dt = oracleHelpler.ExecuteDataTable(query, CommandType.Text, strConn, null);
PagedDataSource pdsList = new PagedDataSource();
pdsList.DataSource = dt.DefaultView;
pdsList.AllowPaging = true;
pdsList.PageSize = AspNetPager1.PageSize;//取控件的分页大小
pdsList.CurrentPageIndex = AspNetPager1.CurrentPageIndex - 1;//显示当前页

AspNetPager1.RecordCount = dt.Rows.Count;//记录总数
AspNetPager1.PageSize = 10;
RepeaterList.DataSource = pdsList;
RepeaterList.DataBind();
}

protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e)
{
AspNetPager1.CurrentPageIndex = e.NewPageIndex;
string strQuerySql = BuildQuerySql();
DataInit(strQuerySql);
}

protected void btnsubmit_Click(object sender, EventArgs e)
{
string strQuerySql = BuildQuerySql();
DataInit(strQuerySql);
}

...全文
127 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaotomo 2013-05-03
  • 打赏
  • 举报
回复
谢谢大家。在查询前清除SESSION就好了。
liu_lxx 2013-05-03
  • 打赏
  • 举报
回复
protected void Page_Load(object sender, EventArgs e)
    {
            string sql_str ="SELECT COUNT(*) FROM YH_GS" ;
            AspNetPager1.AlwaysShow = true;
            AspNetPager1.PageSize = 3; //每页显示的数据量
            AspNetPager1.RecordCount = (int)WebFunction.ExecuteScalar(sql_str); //读出数据库里一共有多少条数据
            BindData();}
    protected void AspNetPager1_PageChanging(object src, PageChangingEventArgs e)
    {
        AspNetPager1.CurrentPageIndex = e.NewPageIndex;
        BindData();
    }
    private void BindData()
    {
        string sql_str = "SELECT * FROM YH_GS";
        string strconn = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
        SqlConnection con = new SqlConnection(strconn);
        SqlDataAdapter ad = new SqlDataAdapter(sql_str, con);
        DataSet ds = new DataSet();
        ad.Fill(ds, AspNetPager1.PageSize * (AspNetPager1.CurrentPageIndex - 1), AspNetPager1.PageSize, "YH_GS");

        Dl_fd.DataSource = ds.Tables["YH_GS"];
        Dl_fd.DataBind();
    }
这是以前用过的一次AspNetPager分页,你看看..
City_member 2013-05-03
  • 打赏
  • 举报
回复
用Session

        /// <summary>
        /// 获取条件
        /// </summary>
        private void GetWhere()
        {
            UserDefaultWhere1 UserDefaultWhere1 = new Model.UserDefaultWhere1();
            UserDefaultWhere1.tbCustomer = tbCustomer.Text;
            UserDefaultWhere1.tbProjectName = tbProjectName.Text;
            UserDefaultWhere1.ddlProjectState = ddlProjectState.SelectedValue;
            UserDefaultWhere1.ddlProject = ddlProject.SelectedValue;
            UserDefaultWhere1.txtMLEstimate = txtMLEstimate.Text;
            UserDefaultWhere1.ddlProjectType = ddlProjectType.SelectedValue;
            UserDefaultWhere1.tbBeginDate = tbBeginDate.Value;
            UserDefaultWhere1.tbEndDate = tbEndDate.Value;
            UserDefaultWhere1.ddlwhere = ddlwhere.SelectedValue;
            UserDefaultWhere1.txtProjectBudget = txtProjectBudget.Text;
            UserDefaultWhere1.ddlDept = ddlDept.SelectedValue;
            UserDefaultWhere1.ddlEmployeeID = ddlEmployeeID.SelectedValue;
            UserDefaultWhere1.IsZC = ddlZc.SelectedValue;
            Session["UserDefaultWhere1"] = UserDefaultWhere1;


            UserDefaultWhere2 UserDefaultWhere2 = new Model.UserDefaultWhere2();
            UserDefaultWhere2.tbCustomer = tbCustomer2.Text;
            UserDefaultWhere2.tbProjectName = tbProjectName2.Text;
            UserDefaultWhere2.ddlProjectState = ddlProjectState2.SelectedValue;
            UserDefaultWhere2.ddlProject = ddlProject2.SelectedValue;
            UserDefaultWhere2.txtMLEstimate = txtMLEstimate2.Text;
            UserDefaultWhere2.ddlProjectType = ddlProjectType2.SelectedValue;
            UserDefaultWhere2.AgreementBeginDate = AgreementBeginDate.Value;
            UserDefaultWhere2.AgreementEndDate = AgreementEndDate.Value;
            UserDefaultWhere2.ddlwhere = ddlwhere2.SelectedValue;
            UserDefaultWhere2.txtProjectBudget = txtProjectMoney.Text;
            UserDefaultWhere2.IsZC = ddlZc2.SelectedValue;
            //UserDefaultWhere2.ddlDept = ddlDept.SelectedValue;
            //UserDefaultWhere2.ddlEmployeeID = ddlEmployeeID.SelectedValue;
            Session["UserDefaultWhere2"] = UserDefaultWhere2;

        }

        /// <summary>
        /// 设置查询条件
        /// </summary>
        private void SetWhere()
        {
            if (Session["UserDefaultWhere1"] != null)
            {
                UserDefaultWhere1 UserDefaultWhere1 = Session["UserDefaultWhere1"] as UserDefaultWhere1;
                tbCustomer.Text = UserDefaultWhere1.tbCustomer;
                tbProjectName.Text = UserDefaultWhere1.tbProjectName;
                ddlProjectState.SelectedValue = UserDefaultWhere1.ddlProjectState;
                ddlProject.SelectedValue = UserDefaultWhere1.ddlProject;
                txtMLEstimate.Text = UserDefaultWhere1.txtMLEstimate;
                ddlProjectType.SelectedValue = UserDefaultWhere1.ddlProjectType;
                tbBeginDate.Value = UserDefaultWhere1.tbBeginDate;
                tbEndDate.Value = UserDefaultWhere1.tbEndDate;
                ddlwhere.SelectedValue = UserDefaultWhere1.ddlwhere;
                txtProjectBudget.Text = UserDefaultWhere1.txtProjectBudget;
                ddlDept.SelectedValue = UserDefaultWhere1.ddlDept;
                ddlEmployeeID.SelectedValue = UserDefaultWhere1.ddlEmployeeID;
                ddlZc.SelectedValue=UserDefaultWhere1.IsZC;
            }
            if (Session["UserDefaultWhere2"] != null)
            {
                UserDefaultWhere2 UserDefaultWhere2 = Session["UserDefaultWhere2"] as UserDefaultWhere2;
                tbCustomer2.Text = UserDefaultWhere2.tbCustomer;
                tbProjectName2.Text = UserDefaultWhere2.tbProjectName;
                ddlProjectState2.SelectedValue = UserDefaultWhere2.ddlProjectState;
                ddlProject2.SelectedValue = UserDefaultWhere2.ddlProject;
                txtMLEstimate2.Text = UserDefaultWhere2.txtMLEstimate;
                ddlProjectType2.SelectedValue = UserDefaultWhere2.ddlProjectType;
                AgreementBeginDate.Value = UserDefaultWhere2.AgreementBeginDate;
                AgreementEndDate.Value = UserDefaultWhere2.AgreementEndDate;
                ddlwhere2.SelectedValue = UserDefaultWhere2.ddlwhere;
                txtProjectMoney.Text = UserDefaultWhere2.txtProjectBudget;
                ddlZc2.SelectedValue=UserDefaultWhere2.IsZC ;
            }
        }
md5e 2013-05-03
  • 打赏
  • 举报
回复
还有查询也要先清除Session protected void btnsubmit_Click(object sender, EventArgs e) { string strQuerySql = BuildQuerySql(); Session["dslist"]=null; DataInit(strQuerySql); }
H_Gragon 2013-05-03
  • 打赏
  • 举报
回复
写个分页存储过程,全搞定了!
md5e 2013-05-03
  • 打赏
  • 举报
回复
引用 8 楼 yaotomo 的回复:
[quote=引用 7 楼 liuchaolin 的回复:] [quote=引用 4 楼 yaotomo 的回复:] [quote=引用 2 楼 liuchaolin 的回复:] void bindData() }
我用下面的代码试了不行,因为SESSION在PAGE_LOAD时写入了值,所以再点查询按钮时就不生成新的DataTable。把Page_Load里的查询去掉后点分页页码数据没有变化。请大神帮我看看哪里写的有问题,感激不尽。

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DataInit(BuildQuerySql());
        }
    }

    private void DataInit(string query)
    {

        if (Session["dslist"] == null)
        {
            DataTable dt = oracleHelpler.ExecuteDataTable(query, CommandType.Text, strConn, null);

            Session["dslist"] = dt;

        }

        PagedDataSource pdsList = new PagedDataSource();
        pdsList.AllowPaging = true;
        pdsList.PageSize = AspNetPager1.PageSize;//取控件的分页大小
        pdsList.CurrentPageIndex = AspNetPager1.CurrentPageIndex - 1;//显示当前页
        pdsList.DataSource = ((DataTable)Session["dslist"]).DefaultView;

        AspNetPager1.RecordCount = ((DataTable)Session["dslist"]).Rows.Count;
        AspNetPager1.PageSize = 10;
        RepeaterList.DataSource = pdsList;
        RepeaterList.DataBind();
    }

    private string BuildQuerySql()
    {
        string query = "select * from tb_workrecord where rownum<1000";
        if (ddlType.Value != "所有类型") query += " and type='" + ddlType.Value + "'";
        if (txtCreator.Value != string.Empty) query += " and creator='" + txtCreator.Value + "'";
        if (txtPerson.Value != string.Empty) query += " and person='" + txtPerson.Value + "'";
        if (txtTaskContent.Value != string.Empty) query += " and taskcontent like '%" + txtTaskContent.Value + "%'";
        if (createbegindate.Value != string.Empty) query += " and createtime>='" + createbegindate.Value + "'";
        if (createenddate.Value != string.Empty) query += " and createtime<='" + createenddate.Value + "'";
        if (completebegindate.Value != string.Empty) query += " and completetime>='" + completebegindate.Value + "'";
        if (completeenddate.Value != string.Empty) query += " and completetime<='" + completeenddate.Value + "'";
        query += " order by id desc";
     
        return query;
    }

    protected void btnsubmit_Click(object sender, EventArgs e)
    {
        string strQuerySql = BuildQuerySql();
        DataInit(strQuerySql);
    }

    protected void AspNetPager1_PageChanged(object sender, EventArgs e)
    {
        string strQuerySql = BuildQuerySql();
        DataInit(strQuerySql);
    }
[/quote] 第一次加载把Session设置为null if (!IsPostBack) { Session["dslist"]=null; DataInit(BuildQuerySql()); }
webdiyer 2013-05-03
  • 打赏
  • 举报
回复
如果你用url分页模式,查询时用get提交表单,将查询条件通过url传递即可
yaotomo 2013-05-03
  • 打赏
  • 举报
回复
引用 7 楼 liuchaolin 的回复:
[quote=引用 4 楼 yaotomo 的回复:] [quote=引用 2 楼 liuchaolin 的回复:] void bindData() }
我用下面的代码试了不行,因为SESSION在PAGE_LOAD时写入了值,所以再点查询按钮时就不生成新的DataTable。把Page_Load里的查询去掉后点分页页码数据没有变化。请大神帮我看看哪里写的有问题,感激不尽。

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DataInit(BuildQuerySql());
        }
    }

    private void DataInit(string query)
    {

        if (Session["dslist"] == null)
        {
            DataTable dt = oracleHelpler.ExecuteDataTable(query, CommandType.Text, strConn, null);

            Session["dslist"] = dt;

        }

        PagedDataSource pdsList = new PagedDataSource();
        pdsList.AllowPaging = true;
        pdsList.PageSize = AspNetPager1.PageSize;//取控件的分页大小
        pdsList.CurrentPageIndex = AspNetPager1.CurrentPageIndex - 1;//显示当前页
        pdsList.DataSource = ((DataTable)Session["dslist"]).DefaultView;

        AspNetPager1.RecordCount = ((DataTable)Session["dslist"]).Rows.Count;
        AspNetPager1.PageSize = 10;
        RepeaterList.DataSource = pdsList;
        RepeaterList.DataBind();
    }

    private string BuildQuerySql()
    {
        string query = "select * from tb_workrecord where rownum<1000";
        if (ddlType.Value != "所有类型") query += " and type='" + ddlType.Value + "'";
        if (txtCreator.Value != string.Empty) query += " and creator='" + txtCreator.Value + "'";
        if (txtPerson.Value != string.Empty) query += " and person='" + txtPerson.Value + "'";
        if (txtTaskContent.Value != string.Empty) query += " and taskcontent like '%" + txtTaskContent.Value + "%'";
        if (createbegindate.Value != string.Empty) query += " and createtime>='" + createbegindate.Value + "'";
        if (createenddate.Value != string.Empty) query += " and createtime<='" + createenddate.Value + "'";
        if (completebegindate.Value != string.Empty) query += " and completetime>='" + completebegindate.Value + "'";
        if (completeenddate.Value != string.Empty) query += " and completetime<='" + completeenddate.Value + "'";
        query += " order by id desc";
     
        return query;
    }

    protected void btnsubmit_Click(object sender, EventArgs e)
    {
        string strQuerySql = BuildQuerySql();
        DataInit(strQuerySql);
    }

    protected void AspNetPager1_PageChanged(object sender, EventArgs e)
    {
        string strQuerySql = BuildQuerySql();
        DataInit(strQuerySql);
    }
md5e 2013-05-02
  • 打赏
  • 举报
回复
引用 4 楼 yaotomo 的回复:
[quote=引用 2 楼 liuchaolin 的回复:] void bindData() { }
当DataTable数据量太大的时候,用Session不合适吧,有没有其他的办法呢?[/quote] 那就得用数据库的rowsnumber public int GetRowCount(string table, string cond, string[] strparam, object[] strval) { string query = string.Format("Select count(*) From {0} {1}", table, cond); DataSet ds = db.GetDataSet(query, strparam, strval); if (ds != null) { if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { return Galsun.Common.Utils.StrToInt(ds.Tables[0].Rows[0][0].ToString(), 0); } } return 0; } public DataSet GetinfoList(string table, int pageindex, int pagesize, string orderFid, string Conditions, string[] strparam, object[] strval) { string query = "Select top {0} * From " + "(Select *,ROW_NUMBER() OVER(ORDER BY {2}) as RowNum From {4} {3}) as newTable " + "Where (RowNum > {1} )"; query = string.Format(query, pagesize, (pageindex - 1) * pagesize, orderFid, Conditions, table); //string query = "Select top {0} * From {1} {2} and id not in(Select top {3} id From {1} {2} Order by {4}) Order by {4}"; //query = string.Format(query, rowcount, table, Conditions, (rowpage - 1) * rowcount + 1, orderFid); return db.GetDataSet(query, strparam, strval); } /// <summary> /// 从数据库中读取数据,刷新页面数据 /// </summary> void bindData() { string cond = " Where id>0 "; //初使化一个SQL语句str if (DNTRequest.GetInt("sclassID", 0) > 0) { cond = cond + " and sid=@classID "; } if (Galsun.Common.DNTRequest.GetInt("spid", 0) > 0) { cond = cond + " and specialID=@specialID "; } if (txt_Search.Text != "") { cond = cond + " and (title like ('%'+ @keyword +'%') or infor like('%'+ @keyword +'%') or Contects like('%'+ @keyword +'%')) "; } string[] strparam = { "@classID", "@keyword","@specialID" }; object[] strval = { DNTRequest.GetInt("sclassID", 0), txt_Search.Text, DNTRequest.GetInt("spid", 0) }; //绑定数据 AspNetPager1.RecordCount = GetRowCount("gl_NewsSystem", cond, strparam, strval); GridView1.DataSource = GetinfoList("gl_NewsSystem", AspNetPager1.CurrentPageIndex, AspNetPager1.PageSize, "isnull(isTop,0) DESC,ORderID DESC,FBDate DESC,id DESC", cond, strparam, strval); GridView1.DataBind(); } /// <summary> /// 页码调控组件的选择事件 /// </summary> protected void AspNetPager1_PageChanged(object sender, EventArgs e) { bindData();//更新页面数据 }
yaotomo 2013-05-02
  • 打赏
  • 举报
回复
引用 3 楼 likevs 的回复:
protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e) 不是用这个事件,你应该用这个事件:protected void AspNetPager1_PageChanged(object sender, EventArgs e)
PageChanging是在换页时(还没有完成换页),也就是说可以取消这个操作。其他本质上和PageChanged没有什么区别的。我试过如果只是换成PageChanged事件也不行的。
yaotomo 2013-05-02
  • 打赏
  • 举报
回复
引用 2 楼 liuchaolin 的回复:
void bindData() { }
当DataTable数据量太大的时候,用Session不合适吧,有没有其他的办法呢?
likevs 2013-04-28
  • 打赏
  • 举报
回复
protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e) 不是用这个事件,你应该用这个事件:protected void AspNetPager1_PageChanged(object sender, EventArgs e)
md5e 2013-04-28
  • 打赏
  • 举报
回复
void bindData() { if (Session["dslist"] == null) { // string str =""; //if (Request.QueryString["bclassid"] != null && Request.QueryString["sclassid"] != null) //{ // str = " and sclassid=" + Request.QueryString["sclassid"]; //} string str = ""; if (Request.QueryString["bclassid"] != null && Request.QueryString["sclassid"] != null) { str = " and sclassid=" + Request.QueryString["sclassid"]; } if (!IsAdmin()) { //String Legal = Request.QueryString["Legal"]; //if (Legal != "all") //{ // if (!CheckLegal(Legal, Session["MLegal"].ToString())) // Response.Redirect("Legal.aspx"); //} str = str + " and UserName='" + Session["MUserName"] + "'"; //btn_Ok.Enabled = false; } string strqry = ""; if (txt_Search.Text == "") strqry = "select * From V_NewsSystem where id>0 " + str + " order by FBDate desc,id desc"; else strqry = "Select * From V_NewsSystem where title like '%" + txt_Search.Text + "%' " + str + " order by FBDate desc,id desc"; //绑定数据 DataSet dslist = db.GetDataSet(strqry); AspNetPager1.RecordCount = dslist.Tables[0].Rows.Count; Session["dslist"] = dslist; } PagedDataSource pds = new PagedDataSource(); pds.AllowPaging = true; pds.PageSize = AspNetPager1.PageSize; pds.CurrentPageIndex = AspNetPager1.CurrentPageIndex - 1; pds.DataSource = ((DataSet)Session["dslist"]).Tables[0].DefaultView; GridView1.DataSource = pds; GridView1.DataBind(); } protected void AspNetPager1_PageChanged(object sender, EventArgs e) { bindData(); }
md5e 2013-04-28
  • 打赏
  • 举报
回复
用Session 保存 DataTable,然后再分页

62,042

社区成员

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

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

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

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