using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;public partial class PagerView : System.Web.UI.Page
{
    private int pageNum;    public int PageNum
    {
        get { return int.Parse(ViewState["pageNum"].ToString()); }
        set { ViewState["pageNum"] = value; }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        
        if (!IsPostBack)
        {
            ViewState["pageNum"] = 1;
        }
    }
    public string pager()
    {
        
        if (string.IsNullOrEmpty(Request.QueryString["pager"]))
        {
            PageNum = 1;
            return PageNum.ToString();
        }
        if (Request.QueryString["pager"] == "next")
        {
            PageNum = PageNum + 1;
            return PageNum.ToString();
        }
        if (Request.QueryString["pager"] == "before")
        {
            PageNum = PageNum - 1;
            return PageNum.ToString();
        }
        return null;
    }
        public string PrintTable(string pageNum,int pageSize)
    {
        pageSize = 10;
        PageNum = int.Parse(pageNum);
        
        string result = "";
        SqlParameter[] par = new SqlParameter[]{
            new SqlParameter("@pagenum",PageNum),
            new SqlParameter("@pagesize",pageSize)
        };
        DataTable dt = getPager("pager",par);
        result +="<table>";
        result += "<tr>";
        result += "<td>序号</td>";
        result += "<td>id</td>";
        result += "<td>名称</td>";
        result += "<td>用户名</td>";
        result += "<td>密码</td>";
        result += "</tr>";
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            result += "<tr>";
            result += "<td>"+dt.Rows[i]["rownum"].ToString()+"</td>";
            result += "<td>" + dt.Rows[i]["id"].ToString() + "</td>";
            result += "<td>" + dt.Rows[i]["title"].ToString() + "</td>";
            result += "<td>" + dt.Rows[i]["uid"].ToString() + "</td>";
            result += "<td>" + dt.Rows[i]["pwd"].ToString() + "</td>";
            result += "</tr>";
        }
        result += "</table>";
        return result;
    }    /// <summary>
    /// 数据库连接,返回DataTable类型
    /// </summary>
    /// <param name="sql"></param>
    /// <param name="par"></param>
    /// <returns></returns>
    public DataTable getPager(string sql,params SqlParameter[] par)
    {
        DataTable dt = new DataTable();
        SqlConnection conn = new SqlConnection("server=.;database=text;uid=sa;pwd=cc");
        conn.Open();
        SqlCommand command = new SqlCommand();
        command.CommandText = sql;
        command.Connection = conn;
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.AddRange(par);
        SqlDataAdapter sda = new SqlDataAdapter(command);
        sda.Fill(dt);
        conn.Close();
        return dt;
    }
    
}
前台代码:
<body>
    <form id="form1" runat="server">
    
    <div id="print">
       
    </div>
     <a href="PagerView.aspx?pager=before" onclick="" >上一页</a>
     <a href="PagerView.aspx?pager=next" onclick="" >下一页</a>
    <script type="text/javascript">
    
       var str = "<%=PrintTable(pager(),10) %>";
       document.getElementById('print').innerHTML += str;
    </script>
    </form>
</body>

解决方案 »

  1.   

    sql中,pager这个存储过程是没有一点问题的。我就感觉public string pager()这个方法体中的ViewState声明方式有问题,但是我又不知道怎么去改。。页面可以正常运行,但是点击下一页的时候 永远只会跳到第二页(因为ViewState声明的时候是1.)高手们速速现身解决一下哦。。
      

  2.   

    这个思路就很混乱.
    [code=C#]
     public void pager()
        {
            
            if (string.IsNullOrEmpty(Request.QueryString["pager"]))
            {
                ViewState["pageNum"]=1;
                    }
            if (Request.QueryString["pager"] == "next")
            {
                ViewState["pageNum"]=(int)ViewState["pageNum"]+1;
            }
            if (Request.QueryString["pager"] == "before")
            {
                ViewState["pageNum"]=(int) ViewState["pageNum"]-11
          }
        }  public string PrintTable(string pageNum,int pageSize)
        {
            pageSize = 10;
           int PageNum = (int)ViewState["pageNum"];
            
            string result = "";
            SqlParameter[] par = new SqlParameter[]{
                new SqlParameter("@pagenum",PageNum),
                new SqlParameter("@pagesize",pageSize)
            };
            DataTable dt = getPager("pager",par);
            result +="<table>";
            result += "<tr>";
            result += "<td>序号</td>";
            result += "<td>id</td>";
            result += "<td>名称</td>";
            result += "<td>用户名</td>";
            result += "<td>密码</td>";
            result += "</tr>";
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                result += "<tr>";
                result += "<td>"+dt.Rows[i]["rownum"].ToString()+"</td>";
                result += "<td>" + dt.Rows[i]["id"].ToString() + "</td>";
                result += "<td>" + dt.Rows[i]["title"].ToString() + "</td>";
                result += "<td>" + dt.Rows[i]["uid"].ToString() + "</td>";
                result += "<td>" + dt.Rows[i]["pwd"].ToString() + "</td>";
                result += "</tr>";
            }
            result += "</table>";
            return result;
        }code]
    这个 你调试一下。理解一下 页面加载顺序。
      

  3.   

    最好不要用viewstate 我用过 数据多了就爆了~
      

  4.   

    if (Request.QueryString["pager"] == "next")
      {
          //这里判断一下是否是最后一页
          if()//不是最后一页
          {
         ViewState["pageNum"]=(int)ViewState["pageNum"]+1;
         }
           else//最后一页
           {
    ViewState["pageNum"]=100;// 赋值最后页数
           }
      }
    if (Request.QueryString["pager"] == "before")
      {
           if((int) ViewState["pageNum"]>=1)
            {
              ViewState["pageNum"]=(int) ViewState["pageNum"]-1;
            }
           else
             {
              ViewState["pageNum"]=0;
             }
      }
      

  5.   

    同意,我也用过但是viewstate很容易爆菊,贴别你不是存储过程里面处理每次查的太多了,你后台计算都卡死人!