RadioListBox相当于是一个筛选器,比如可以查看“未通过名单”“通过名单”“所有名单”,然后单击一个选项就可用查看相应的一些数据,RadioListBox已经AutoPostBack了。 数据绑定用的是Repeater来显示的。翻页的用的是Lable超链接,当我单击翻页链接的时候,本来地址是xxx.aspx?topage=2&npage=通过名单,表示我要查看第二页的通过名单的数据,可是一点击翻页后,RadioListBox就初始化到“所有名单”了,显示数据也变成了第二页的所有数据的东西了xxx.aspx?topage=2&npage=所有名单…… 现在求高手帮我解决这个问题,如何翻页后还是显示的当前的RadioListBox的所有数据???困扰我两天了……以下是本菜鸟的代码,如果高手有更好的代码也可以指教一二              DataSet ds = new DataSet(); 
            string npage = q("npage"); 
            string switchRB1 = RB1.SelectedValue;             int PageSize = 2; 
            int PageCount, RecordCount; 
            int ToPage = Convert.ToInt32(Request.QueryString["ToPage"]); 
            string pagesql = null, sql = null; 
            switch (switchRB1) 
            { 
                case "未通过审核": 
                    sql = "select count(id) from Company_Basemeans where isPast='未通过'"; 
                    break; 
                case "通过审核": 
                    sql = "select count(id) from Company_Basemeans where isPast='通过'"; 
                    break; 
                case "企业总数": 
                    sql = "select count(id) from Company_Basemeans"; 
                    break; 
                case "申请图招": 
                    sql = "select count(id) from Company_Basemeans where piczp = '申请通过图招'"; 
                    break; 
            } 
            string sqlstr = ConfigurationManager.ConnectionStrings["0745Job"].ToString(); 
            SqlConnection conn = new SqlConnection(sqlstr); 
            SqlCommand MyComm = new SqlCommand(sql, conn); 
            conn.Open(); 
            RecordCount = Convert.ToInt32(MyComm.ExecuteScalar()); 
            conn.Close();             if (RecordCount % PageSize != 0) 
            { 
                PageCount = RecordCount / PageSize + 1; 
            } 
            else 
            { 
                PageCount = RecordCount / PageSize; 
            }             if (ToPage == Convert.ToInt32(null)) 
            { 
                ToPage = 1; 
            }             if (ToPage > PageCount) 
            { 
                ToPage = PageCount; 
            } 
            if (ToPage <= 1) 
            { 
                switch (switchRB1) 
                { 
                    case "未通过审核": 
                        pagesql = "select...."; 
                        break; 
                    case "通过审核": 
                        pagesql = "select...."; 
                        break; 
                    case "企业总数": 
                        pagesql = "select...."; 
                        break; 
                    case "申请图招": 
                        pagesql = "select...."; 
                        break; 
                } 
            } 
            else 
            { 
                switch (switchRB1) 
                { 
                    case "未通过审核": 
                        pagesql = "select...."; 
                        break; 
                    case "通过审核": 
                        pagesql = "select...."; 
                        break; 
                    case "企业总数": 
                        pagesql = "select...."; 
                        break; 
                    case "申请图招": 
                        pagesql = "select...." 
                        break; 
                } 
            } 
            if (ToPage <= 1) 
            { 
                LinkPrev.Enabled = false; 
                Linkhead.Enabled = false; 
                CurrentPage.Text = "1"; 
            } 
            else 
            { 
                LinkPrev.Enabled = true; 
                LinkPrev.NavigateUrl = "?ToPage=" + (ToPage - 1) + "&npage=" + switchRB1; 
                Linkhead.Enabled = true; 
                Linkhead.NavigateUrl = "?ToPage=1&npage=" + switchRB1; 
            } 
            if (ToPage >= PageCount) 
            { 
                LinkFoot.Enabled = false; 
                LinkNext.Enabled = false; 
                CurrentPage.Text = PageCount.ToString(); 
            } 
            else 
            { 
                LinkFoot.Enabled = true; 
                LinkFoot.NavigateUrl = "?ToPage=" + PageCount + "&npage=" + switchRB1; 
                LinkNext.Enabled = true; 
                LinkNext.NavigateUrl = "?ToPage=" + (ToPage + 1) + "&npage=" + switchRB1; 
            } 
            //**********************Label控件绑定********************** 
            TotalPage.Text = Convert.ToString(PageCount); 
            CurrentPage.Text = Convert.ToString(ToPage); 
            LbRecord.Text = RecordCount.ToString(); 
            LbPageRecord.Text = PageSize.ToString(); 
            //**********************数据绑定********************** 
            SqlDataAdapter da = new SqlDataAdapter(pagesql, conn); 
            da.Fill(ds, "ShowPage");             RP1.DataSource = ds.Tables["ShowPage"].DefaultView; 
            RP1.DataBind();

解决方案 »

  1.   

    1 使用SQL查询语句或存储过程实现分页
      如:select top m * from myTable where id not in(select top n id from myTable) --m>n
      若m=40,n=20,则显示的是第 21-40 条记录
      由于是本页刷新,可使用ViewState记住一些值或状态2 自己写一个封闭分页的表格控件,传送数据源即能自动实现[推荐],网上亦有参考代码
      使用Get传值或其他(如ViewState)传值
      

  2.   

    1.方法1,把超链接改成<asp:linkbutton 用post的方式翻页2.或者,在链接参数里加上radionbuttonlist选中的值,在page_load中设置.
      如:
         page_load
        {
              string switchRB1 = Request.QueryString["npage"];
              if(switchRB1 !=null)         {
              RB1.SelectedValue = switchRB1 ;//不过这样有点安全问题,最好改成循环items的,我这里懒得写了
     }
    }
    另外,radiobuttonlist的value最好不要用中文
      

  3.   

    get方式无法保持状态(ViewState),建议最好post分页
      

  4.   

    问题貌似没有解决啊。。我准备用Session保存,但不知道程序流程应该怎么写。还请高手指教
      

  5.   

    http://dotnet.aspx.cc/ShowList.aspx?id=1
    去找有一片文章符合你的要求
      

  6.   


    谢谢这位大哥的帮忙,不过孟子那里面的都是基本的分页而已,并没有用到RadioListBox或者DropDownList等控件对分页内容进行筛选的例子……还请麻烦了
      

  7.   

    我写的Repeater分页 + 排序
    楼主可以看看是否有帮助
    http://blog.csdn.net/amandag/archive/2008/07/19/2677316.aspx
      

  8.   

    为什么不要用Session?用Session保存下RadioListBox的值有问题吗?
      

  9.   

    http://dotnet.aspx.cc/article/f43af9a5-2c2e-4aa6-e976-21e9569f5a8a/read.aspx
    看看这个有没有帮助
      

  10.   

    我觉得正确的解决方法是:点击Lable后不要直接转到一个地址,而是提交submit(),用一个隐藏的TextBox保存要转到的页号。在服务器端的page_load中处理显示内容,具体代码如下:客户端:<a href='javascript:gotonext()'>[下一页]</a><INPUT id="pagenum" value="1" type="hidden" runat="server"> <script>
    function gotopage( n )
    {
    document.getElementById("pagenum").value = n;  /* pagenum 是一个隐藏控件 ×/
    Form1.submit();
    }
    function gotofirst()
    {
    gotopage( 1 );
    }
    function gotolast()
    {
    gotopage( 1000000 );
    }
    function gotopre()
    {
    gotopage( parseInt( document.getElementById("pagenum").value ) - 1 );
    }
    function gotonext()
    {
    gotopage( parseInt( document.getElementById("pagenum").value ) + 1 );
    }
    </script>服务器端:在Page_Load中处理转到第几页及其它功能。这样就不会被初始化了。总结: 在处理换页、筛选、排序、验证等情况的时候,不要用地址后面加参数的方式传递信息,因为这样会打开一个新页,所有的控件都会被初始化,有时可能有几十个控件,都用Session记录的话,要把它们读出来,还要填回去,很麻烦。正确的方法就是用提交submit(),或者用.net的事件,这样的话各个控件就能够保持原来的状态。希望对你有帮助。