关于ASP分页代码的问题

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

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

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

请问这是什么原因??

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

2个回答

分页是一个说起来复杂 但是又不是很复杂的东西 但是要做好 真心不容易
不过你运气好 我昨天刚写完,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;
        }
    }
            可能有点简易  将就一下吧

晕死 给错了 这是my teacher写的 不过应该会好一些0.0 不过,你把sql语句加上去还有排序字段 我这个是页面传的 还有这个是columnstring的赋值方式是id|编号,name|名字。。。。类似的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐