通过URL分页,
并具有多条件查询的功能。
查询按钮不能执行页面跳转功能。
第一次进入不显示查询结果。
分页跳转显示查询结果。
按钮点击后显示查询结果。请教大家的设计方案

解决方案 »

  1.   

    你还要知道些啥子?URL分页要解释还是?
      

  2.   

    描述不清?
    具体的是网页中分面。一般使用URL分页。每页固定行数。URL上标明页数。如
    http://csdn.net/list.aspx?p=1//第一页
    http://csdn.net/list.aspx?p=2//第二页
    http://csdn.net/list.aspx?p=3//第三页。。但是在每页的数据查询出来是可以通过前台选择或者填加的。多个查询条件的。
    如根据国家或者什么时间段查询,然后再分页应该可以理解吧?一般这种分页方式大多采用直接页面跳转,使用querystring传值。但现在可能查询条件N多,querystring不够用。所以可否有其他方案设计?
      

  3.   

    public int GuestCount;
        protected void Page_Load(object sender, EventArgs e)
        {
            this.Title=ConfigurationSettings.AppSettings["webtitle"];
            if (!IsPostBack)
            {
                BindDropDown();
                Label1.Text = "暂无结果!";
            }
        }
        private void BindDropDown()
        {
            Selectcontrol ss = new Showz();
            DataSet ds = ss.CMenu();
            DropDownList1.DataSource = ds.Tables["sclass"].DefaultView;
            DropDownList1.DataTextField = "sclass_name";
            DropDownList1.DataValueField = "sclass_id";
            DropDownList1.DataBind();
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            string sqlstring="";
            string input = TextBox1.Text.ToString().Trim();
            int select =Int32.Parse(DropDownList1.SelectedValue);
            Selectcontrol ss = new Showz();
            if (select.ToString()=="")
            {
                sqlstring = "select * from ziyuan where zname like '%"+input+"%'";
                DataSet ds = ss.DsGetinfo(sqlstring);
                DataList1.DataSource = ds.Tables["aa"];
                Label1.Text ="搜索到有:"+ ds.Tables["aa"].Rows.Count.ToString()+"条记录!";            GuestCount = ds.Tables[0].Rows.Count;
                PagedDataSource objPage = new PagedDataSource();
                objPage.DataSource = ds.Tables[0].DefaultView;
                lbCount.Text = "总共有" + ds.Tables[0].Rows.Count.ToString() + "条记录";
                Label3.Text = "总共有" + ds.Tables[0].Rows.Count.ToString() + "条记录";
                //设置可以分页以及每页的行数
                objPage.AllowPaging = true;
                objPage.PageSize = 10;
                //总页数
                lbTotalPage.Text = "总页数:" + objPage.PageCount.ToString() + "页";
                Label4.Text = "总页数:" + objPage.PageCount.ToString() + "页"; ;
                //定义变量来保存当前页
                int CurPage;
                //判断是否具有页面跳转的请求
                if (Request.QueryString["Page"] != null)
                {
                    CurPage = Convert.ToInt32(Request.QueryString["Page"]);
                }
                else
                {
                    CurPage = 1;
                }
                //设置当前页的索引
                objPage.CurrentPageIndex = CurPage - 1;
                lbCurPage.Text = "当前页 : 第" + CurPage.ToString() + "页";
                Label5.Text = "当前页 : 第" + CurPage.ToString() + "页";
                //如果不是首页
                if (!objPage.IsFirstPage)
                {
                    //定义上一页超链接的url为: 当前执行页面的虚拟路径,并传递下一页面的索引值
                    hlnkHead.NavigateUrl = Request.CurrentExecutionFilePath +
        "?Page=" + Convert.ToString(1);
                    HyperLink1.NavigateUrl = Request.CurrentExecutionFilePath +
             "?Page=" + Convert.ToString(1);
                    hlnkPrev.NavigateUrl = Request.CurrentExecutionFilePath +
        "?Page=" + Convert.ToString(CurPage - 1);
                    HyperLink2.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage - 1);
                }
                //如果不是最后一页
                if (!objPage.IsLastPage)
                {
                    //定义“下一页”超链接url为:当前执行页面的虚拟路径,并传递下一页面的索引值
                    hlnkNext.NavigateUrl = Request.CurrentExecutionFilePath +
        "?Page=" + Convert.ToString(CurPage + 1);
                    HyperLink3.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage + 1);
                    hlnkEnd.NavigateUrl = Request.CurrentExecutionFilePath +
        "?Page=" + objPage.PageCount.ToString();
                    HyperLink4.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage + 1);
                }
                DataList1.DataSource = objPage;
                DataList1.DataBind();        }
            else
            {
                sqlstring = "select * from ziyuan where s_id="+select+" and zname like '%"+input+"%'";
                DataSet ds = ss.DsGetinfo(sqlstring);
                DataList1.DataSource = ds.Tables["aa"];
                Label1.Text = "搜索到有:" + ds.Tables["aa"].Rows.Count.ToString() + "条记录!";            GuestCount = ds.Tables[0].Rows.Count;
                PagedDataSource objPage = new PagedDataSource();
                objPage.DataSource = ds.Tables[0].DefaultView;
                lbCount.Text = "总共有" + ds.Tables[0].Rows.Count.ToString() + "条记录";
                Label3.Text = "总共有" + ds.Tables[0].Rows.Count.ToString() + "条记录";
                //设置可以分页以及每页的行数
                objPage.AllowPaging = true;
                objPage.PageSize = 10;
                //总页数
                lbTotalPage.Text = "总页数:" + objPage.PageCount.ToString() + "页";
                Label4.Text = "总页数:" + objPage.PageCount.ToString() + "页"; ;
                //定义变量来保存当前页
                int CurPage;
                //判断是否具有页面跳转的请求
                if (Request.QueryString["Page"] != null)
                {
                    CurPage = Convert.ToInt32(Request.QueryString["Page"]);
                }
                else
                {
                    CurPage = 1;
                }
                //设置当前页的索引
                objPage.CurrentPageIndex = CurPage - 1;
                lbCurPage.Text = "当前页 : 第" + CurPage.ToString() + "页";
                Label5.Text = "当前页 : 第" + CurPage.ToString() + "页";
                //如果不是首页
                if (!objPage.IsFirstPage)
                {
                    //定义上一页超链接的url为: 当前执行页面的虚拟路径,并传递下一页面的索引值
                    hlnkHead.NavigateUrl = Request.CurrentExecutionFilePath +
        "?Page=" + Convert.ToString(1);
                    HyperLink1.NavigateUrl = Request.CurrentExecutionFilePath +
             "?Page=" + Convert.ToString(1);
                    hlnkPrev.NavigateUrl = Request.CurrentExecutionFilePath +
        "?Page=" + Convert.ToString(CurPage - 1);
                    HyperLink2.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage - 1);
                }
                //如果不是最后一页
                if (!objPage.IsLastPage)
                {
                    //定义“下一页”超链接url为:当前执行页面的虚拟路径,并传递下一页面的索引值
                    hlnkNext.NavigateUrl = Request.CurrentExecutionFilePath +
        "?Page=" + Convert.ToString(CurPage + 1);
                    HyperLink3.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage + 1);
                    hlnkEnd.NavigateUrl = Request.CurrentExecutionFilePath +
        "?Page=" + objPage.PageCount.ToString();
                    HyperLink4.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage + 1);
                }
                DataList1.DataSource = objPage;
                DataList1.DataBind();
            }
        }
    在这里我用DataList1显示数据,有查询,分页,第一次打开没有结果显示,输入条件后按查询才有结果显示
      

  4.   

    喀,略看了一下,你这没有通过URL分页,用的是服务器控件,一次必须全部查询出所以数据。所以不合适啊。。
      

  5.   

    你的意思就是通过url记录查询条件,现在查询条件太多,记录不下来,如果不改变你这个设计方式的话,有2个办法
    1、使用session
    2、添加一个隐藏页,在隐藏页面上记录
      

  6.   

    使用session具有很多不合理性,
    说说使用隐藏页咋弄?
      

  7.   


    使用session是有不合理性,这个是你的样式决定的,使用url传递查询条件本身就不太合理。
    使用隐藏页就是把你现在的页放入一个框架中,在框架里面添加一个width为0的页面,那里记录查询条件,翻页时需要修改那个界面上的值,加载界面时从那个界面取值
      

  8.   

    通过存储过程分页,或用aspnetpager等分页控件
    在第一次查询时viewstate属性是否有值。没值绑定所有数据
    private string Name
    {
    get
    {
    return (string)ViewState[""];
    }
    set
    {
    ViewState[""]=value;
    }
    }
    参考
      

  9.   

    查询条件多直接session保存,url分页
      

  10.   


    隐藏页能取到值?当点击<a hrf的时候肯定不能取到原来页面的隐藏页面的值吧?怎么个取法?
    Session和样式没啥关系?
    session不合理的原因:
    在一个页面保存好了后,点到其他页面的时候,本来没有选择条件查询的,结果确有了当然,你会说不同页面使用不同的session.这样的话session就多起来了。1个页面有100个查询条件,就得用100个session,当然,你会说可以用一个session保存实体或者hashtable,但是session其实也是hashtable,这样的话,如果有100个页面,且有100+个人以上访问的话,你想有多少个session?
      

  11.   


    你参考中的分页仍然是用一控件,你的页码仍然是以按钮形式的,即不会有跳转页面的,所以可以用viewstate....
      

  12.   

    你把获取到的url参数传递进你的SQL里面不就行了?
      

  13.   

    如果获取参数值为空就不执行查询,如果不为空就appen进去
      

  14.   

    已经说了URL不够用有没有其他的好方案?
      

  15.   

    url不够用就把参数存到哈希表里面。在把哈希表保存到session,就不会创建那么多session了
      

  16.   

    不管是存在实体或者哈希,都只是少了sessionid而已。没啥大区别。。在我看来
      

  17.   

    如果对于上一页,下一页等只是一个URL的链接,除了URL传值,应该没有别的办法了.
    我一般是用4个按钮加1个下拉列表做分页查询.然后把要跳转的页数放在CommandArgument属性里
      

  18.   

    或者楼主可以试试把需要的数据存在COOKIE里面,这样就涉及不到什么跨不跨页的问题了
      

  19.   

    cookie和session一个娘养的,没啥区别。。
      

  20.   

    Ajax +  分页存储过程
      

  21.   


    首先,在隐藏界面藏值问题。你输入条件后,需要有一个触发事件吧,在触发事件里向隐藏界面保存值,在pageload里面检查隐藏页面的值。
    其次,我说的样式指的是模式或框架,现在问题主要是你翻页控件出现的问题,在aspx界面使用<a 作为翻页控件有点不太合适,使用linkbutton也可以啊,使用button也可以啊,况且有listgrid,listgridview等控件,不需要单独开发翻页控件的,所以我感觉你的翻页控件做的不好,如果要单独做也可以,但是做的时候应该考虑到查询条件的问题。
      

  22.   

    你点查询按钮的时候,这时候所有数据是post到服务器的,所以能拿到查询条件的机会就这一个
    在服务器端生成<A>标签的时候把查询条件,通过自己写的字符串压缩算法压缩并写入href,然后请求服务器端的时候,服务器直接解压这个字符串,然后从里面提取查询条件
    实际这样做效果也就那样,IE限制是2K 我用的算法也就能传到4K而已
      

  23.   

    还有个方法 我只是想想 没这样做
    你第一次回发的参数 全部写进数据库 表的主键用GUID 把GUID返回到URL上 然后根据回发的GUID是否存在来判断是不是第一次查询,还是分页查询
    这样理论上也行 关键就是要往数据库来回写东西
      

  24.   

    建议你取数据用泛型List,给你个连接看一下:
    http://www.cnblogs.com/lhking/archive/2009/04/16/1437497.html
      

  25.   


    /*
    分页查询
    */
    create PROCEDURE [sp_Page]
    @PageCurrent int, --要显示的页码
    @PageSize int,--每页的大小
    @ifelse nvarchar(1000),--返回的字段
    @where nvarchar(1000),--条件
    @order nvarchar(1000)--排序
    AS
    BEGIN
    BEGIN TRY
    DECLARE @strSQL nvarchar(500),@strSQLcount nvarchar(500),@countPage int
    if ISNULL(@PageSize,0)<1 
    set @PageSize=20
    set @strSQL='select * from
    (
    select '+@ifelse+',ROW_NUMBER() OVER('+@order+') as row from '+@where+'
    ) a 
    where row between '+CONVERT(nvarchar(10), @PageCurrent*@PageSize-@PageSize+1)+' and '+CONVERT(nvarchar(10), @PageCurrent*@PageSize)+''
    set @strSQLcount='select count(1) as count from '+@where
    EXECUTE sp_executesql @strSQL;
    EXECUTE sp_executesql @strSQLcount;
    END TRY 
    BEGIN CATCH
    print ERROR_MESSAGE()
    END CATCH
    END
    -- 例:
    -- declare @where nvarchar(1000);
    -- set @where='gongqiu where ...';
    -- exec [sp_Page] @Page,@Size,'*',@where, 'order by date desc'贴一个我现在用的分页存储过程,感觉还不错,SQL版本是2005
      

  26.   

    url分页保存页面查询参数确实很头疼,我现在也是一样,用session搞定,说实话还是不要用url好