在牛腩视频中的最后一集,涉及到了一个外部控件AspNetPager实现分页记录显示的一个小例子没有完成,据了解分页显示功能在软件设计中是很重要的一个功能,因此,在这里讲未完成的工作完成。
在视频中讲到,gridview的分页功能属于假分页,为什么呢?因为每次分页必须查询完数据库中所有的记录,这样如果数据量过大,将会造成很大不便。所以选择了AspNetPager这个控件。
其实,这个控件只是提供了一个分页功能,它并不能显示数据,因此,它还是需要与gridview结合起来使用才可以完全实现我们分页的这个功能。
当然gridview这个控件的使用,视频中有用到,但是由于多次复制粘贴的缘故,到后来很难回忆出当时到底是如何使用的了。其实这个控件主要有这么几个关键注意的点,如下:
1、在编辑列时,由于过长代码,可选择在设计视图中进行编辑
2、若想与css结合设计表格的样式,可将列转换为自定义模板列如下图所示:
3、autogenericcolumns这个属性的应用
好了,了解了控件使用后,我们就来利用它们实现分页制作吧!
首先,通过存储过程来编写数据库查询语句,如下:
ALTER PROCEDURE [dbo].[partPage] @startIndex int, --查询开始记录数 @endIndex int --结束记录数 AS BEGIN with temptbl as ( SELECT ROW_NUMBER() OVER (ORDER BY id desc)AS 行号, * from news --使得记录按顺序排列,按行号查询 ) SELECT * FROM temptbl where 行号 between @startIndex and @endIndex END
public DataTable SelectByPage(int startIndex,int endIndex)
{
DataTable dt = new DataTable();
string cmdText = "partPage";
SqlParameter[] paras = new SqlParameter[]{
new SqlParameter ("@startIndex",startIndex ),
new SqlParameter ("@endIndex",endIndex )
};
dt = sqlhelper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure);
return dt;
}
/// <summary>
/// 执行带参数的查询语句
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="paras">参数</param>
/// <returns>datatable</returns>
public DataTable ExecuteQuery(string cmdText,SqlParameter []paras,CommandType ct)
{
DataTable dt = new DataTable();
cmd = new SqlCommand(cmdText , GetConn());
cmd.Parameters.AddRange(paras);
cmd.CommandType = ct;
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(sdr);
}
return dt;
}声明:在这里是按照视频中那样在设计中指定了每页显示5条新闻,如果在代码中写也是可以的,可以写入asp.pagesize=5;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack )
{
DataTable dt = new DataTable();
dt = new NewsManager().SelectAll();//选择所有新闻
anp.RecordCount = dt.Rows.Count; //记录总数
//开始绑定记录
int startIndex=anp.StartRecordIndex ; //开始记录数
int endIndex=anp.EndRecordIndex ; //结束记录数
dt = new NewsManager().SelectByPage(startIndex, endIndex);
gvNews.DataSource = dt;
gvNews.DataBind();
}
}
protected void anp_PageChanged(object sender, EventArgs e)
{
Response.Write("开始记录数为:" + anp.StartRecordIndex + "结束记录数为:" +anp.EndRecordIndex );
}
看着还不错吧???
原文:http://blog.csdn.net/wangyy130/article/details/39084913