gaoyundl 2015-05-05 13:23 采纳率: 0%
浏览 1695

关于ASP分页代码的问题

本人新手一个,请教个问题。

在做ASP分页的时候,无论你设置每页多少条记录,第一页的时候会把所有记录显示出来,第二页时会把除了第一页的条数全显示出来。

比如设置每页10条记录。第一页会把所有记录显示出来,第二页会把除了前10条记录的剩下所有记录显示出来。

请问这是什么原因??

晕啊。。。。。。。。没有C币

  • 写回答

2条回答 默认 最新

  • yangxing8jn 2015-05-06 03:00
    关注

    分页是一个说起来复杂 但是又不是很复杂的东西 但是要做好 真心不容易
    不过你运气好 我昨天刚写完,net将分页写成一个控件,下面是源码:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;

    namespace ASP.NET_04.Control
    {
    public partial class GridViewControl : System.Web.UI.UserControl
    {
    DBHelper db = new DBHelper();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindDataGirdView();
            }
        }
    
        #region 设置属性
        /// <summary>
        /// SQL语句
        /// </summary>
        public string SqlStr { get; set; } 
    
        /// <summary>
        /// 每页显示多少数据
        /// </summary>
        public int? PageSize { get; set; }
    
        /// <summary>
        /// 当前页数
        /// </summary>
        public int? PageIndex { get; set; }
    
        /// <summary>
        /// 排序字段
        /// </summary>
        public string SortId { get; set; }
    
        /// <summary>
        /// 列的显示设置 UserId|用户编号,UserName|用户姓名....
        /// </summary>
        public string ColumnString { get; set; }
    
        /// <summary>
        /// 链接到哪个页面
        /// </summary>
        public string LinkPage { get; set; }
    
        #endregion
    
    
        public void BindDataGirdView()
        {
    
            //共有多少条数据
            int countNum;
            if (PageSize == null)
            {
                PageSize = 10;
            }
            if (PageIndex == null)
            {
                PageIndex = 1;
            }
    
            DataTable dt = db.GetDataPage(SqlStr, int.Parse(PageSize.ToString()), int.Parse(PageIndex.ToString()), SortId, out countNum);
            labCount.Text = countNum.ToString();
            labPageSize.Text = PageSize.ToString();
            labPageIndex.Text = PageIndex.ToString();
    
            //总页数算法 (总数量+每页显示数据-1)/每页显示数据
            labCountPage.Text = ((countNum + PageSize - 1) / PageSize).ToString();
    
            GridView1.DataSource = dt;
    
            //处理列的显示
            //判断一下,是否存在列
            if (GridView1.Columns.Count == 0)
            {
                //加入显示列
                string[] lst = ColumnString.Split(',');
    
                for (int i = 0; i < lst.Length; i++)
                {
                    BoundField bf = new BoundField();
                    bf.DataField = lst[i].Split('|')[0];
                    bf.HeaderText = lst[i].Split('|')[1];
                    GridView1.Columns.Add(bf);
                }
                //加入模板列
                TemplateField tf = new TemplateField();
                tf.HeaderText = "操作";
                GridView1.Columns.Add(tf);
    
            }
    
    
            GridView1.DataBind();
    
            //给模板列加入内容
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                GridView1.Rows[i].Cells[ColumnString.Split(',').Length].Text = "<a href='" + LinkPage + "?id=" + GridView1.Rows[i].Cells[0].Text + "'>编辑</a>";
            }
    
    
    
                if (PageIndex == 1)
                {
                    btnFirst.Enabled = false; //首页
                    btnPerv.Enabled = false;//上一页
                }
                else
                {
                    btnFirst.Enabled = true; //首页
                    btnPerv.Enabled = true;//上一页
                }
    
            if (PageIndex == int.Parse(labCountPage.Text))
            {
                btnNext.Enabled = false;  //下一页
                btnLast.Enabled = false;  //尾页
            }
            else
            {
                btnNext.Enabled = true;
                btnLast.Enabled = true;
            }
        }
    
        protected void btnFirst_Click(object sender, EventArgs e)
        {
            PageIndex = 1;
            BindDataGirdView();
        }
    
        protected void btnPerv_Click(object sender, EventArgs e)
        {
            if ((int.Parse(labPageIndex.Text) - 1) >= 1)
            {
                PageIndex = int.Parse(labPageIndex.Text) - 1;
                BindDataGirdView();
            }
        }
    
        protected void btnNext_Click(object sender, EventArgs e)
        {
            if ((int.Parse(labPageIndex.Text) + 1) <= int.Parse(labCountPage.Text))
            {
                PageIndex = int.Parse(labPageIndex.Text) + 1;
                BindDataGirdView();
            }
        }
    
        protected void btnLast_Click(object sender, EventArgs e)
        {
            PageIndex = int.Parse(labCountPage.Text);
            BindDataGirdView();
        }
    }
    

    }

    数据底层的

    ///
    /// 分页的方法
    ///
    /// SQL查询语句
    /// 每页显示多少数据
    /// 当前页数
    /// 排序
    /// 输出参数,返回一共多少条数据
    /// 返回数据表
    public DataTable GetDataPage(string sql, int pageSize, int pageIndex, string sort, out int recordCount)
    {
    SqlConnection conn = new SqlConnection(sqlStr);
    if (conn.State != ConnectionState.Open)
    {
    conn.Open();
    }
    SqlParameter[] parms = new SqlParameter[]
    {
    new SqlParameter("@Source",SqlDbType.NVarChar),
    new SqlParameter("@PageSize",SqlDbType.Int),
    new SqlParameter("@CurrentPage",SqlDbType.Int),
    new SqlParameter("@FieldList",SqlDbType.NVarChar),
    new SqlParameter("@Sort",SqlDbType.NVarChar),
    new SqlParameter("@RecordCount",SqlDbType.Int),
    new SqlParameter("@FdName",SqlDbType.NVarChar)
    };
    parms[0].Value = sql;
    parms[1].Value = pageSize;
    parms[2].Value = pageIndex;
    parms[3].Value = DBNull.Value;
    parms[4].Value = sort;
    parms[5].Value = DBNull.Value;
    parms[6].Value = DBNull.Value;
    //设置参数类型是输出参数
    parms[5].Direction = ParameterDirection.Output;

            SqlCommand cmd = new SqlCommand("pro_sys_GetRecordByPage2005", conn);
            cmd.CommandType = CommandType.StoredProcedure;
    
            foreach (SqlParameter p in parms)
            {
                cmd.Parameters.Add(p);
            }
            using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
            {
                DataTable dt = new DataTable();
                sda.Fill(dt);
                recordCount = (int)parms[5].Value;
                return dt;
            }
        }
                可能有点简易  将就一下吧
    
    评论

报告相同问题?

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler