问题描述
- 关于ASP分页代码的问题
-
本人新手一个,请教个问题。在做ASP分页的时候,无论你设置每页多少条记录,第一页的时候会把所有记录显示出来,第二页时会把除了第一页的条数全显示出来。
比如设置每页10条记录。第一页会把所有记录显示出来,第二页会把除了前10条记录的剩下所有记录显示出来。
请问这是什么原因??
晕啊。。。。。。。。没有C币
解决方案
分页是一个说起来复杂 但是又不是很复杂的东西 但是要做好 真心不容易
不过你运气好 我昨天刚写完,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|名字。。。。类似的