我是一个初学者,所以关于“ASP.NET中DataList控件和AspNetPager控件的组合使用并实现分页”不是很明白。网上也有相关的知识和不少的博客文章讲述了这个知识点。但是,Copy下来例子,在电脑上尝试,都是错误的。弄了很久还是没有搞出来。郁闷~~~~
经过都次的尝试,查了很多不同的帖子,才明白其中的道理!
所以,想些个详细的和正确的,关于ASP.NET中DataList控件和AspNetPager控件的组合使用并实现分页的完整过程。
仅供参考。我知道,已经是有点晚了,也只希望能够帮助需要的人!
首先还是要感谢“AspNetPager控件“的作者!你是我努力的方向!!!
准备好了嘛?!
开始了~~~~~~~~~~
首先,要下载一个叫做 AspNetPager.dll 的控件。
然后,打开你的 Visual Studio 2008(我用的是2008)。在工具栏的任意一个分栏(如:数据)右击鼠标 》》》
选择项 》》》选择工具箱对话框 》》》 浏览 找到你下载到的 AspNetPager.dll 》》》 打开 》》》确定。
这样你就可以看到在你右击的那个分栏下出现了一个控件,没错,就是 AspNetPager 控件。
现在就可以进行代码的编写了!!!
你分别把DataList控件和 AspNetPager 控件拖拽的你的页面中。这样,前代页面就出现了
<%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %>
说明你已经注册了 AspNetPager 控件。
详细的我也不在说了,给你提供一个完整的实例代码:
前台的 Default.aspx页面>>>>>>>>>>>>>>>>>>>
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebDome._Default" %>
<%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DataList ID="DataList1" runat="server">
<ItemTemplate>
新闻编号:<%#DataBinder.Eval(Container.DataItem, "NEWS_ID")%><br />
新闻标题:<%#DataBinder.Eval(Container.DataItem, "NEWS_TITLE")%><br />
新闻内容:<%#DataBinder.Eval(Container.DataItem, "NEWS_CONTENT")%><br />
新闻日期:<%#DataBinder.Eval(Container.DataItem, "NEWS_DATE")%>
</ItemTemplate>
</asp:DataList></div>
<webdiyer:aspnetpager id="AspNetPager1" runat="server" OnPageChanging="AspNetPager1_PageChanging"></webdiyer:aspnetpager>
</form>
</body>
</html>
后台的 Default.aspx.cs 页面>>>>>>>>>>>>>>>>>>>
using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
// 不要忘记引入。
using Wuqi.Webdiyer;
namespace WebDome
{
public partial class _Default : System.Web.UI.Page
{
// 连接字符串
private String strConnect = "provider=microsoft.jet.oledb.4.0;data source=" + System.Web.HttpContext.Current.Server.MapPath("App_Date/news.mdb");
// 连接器
OleDbConnection objConnection;
// 要对数据源执行的SQL或者是存储过程
OleDbCommand cmd;
protected void Page_Load(object sender, EventArgs e)
{
this.objConnection = new OleDbConnection(strConnect);
// 如果是第一次载入
if (!Page.IsPostBack)
{
cmd = new OleDbCommand("select count(NEWS_ID) from NEWS", objConnection);
objConnection.Open();
// 设置要分页的数据的总数
AspNetPager1.RecordCount = (int)cmd.ExecuteScalar();
AspNetPager1.DataBind();
//绑定数据
BindData();
objConnection.Close();
}
}
void BindData()
{
cmd = new OleDbCommand("SELECT NEWS_ID,NEWS_TITLE,NEWS_CONTENT,NEWS_DATE FROM news ORDER BY NEWS_ID DESC", this.objConnection);
// 数据适配器,用于填充数据集(DataSet)
OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
// 声明数据集和
DataSet ds = new DataSet();
// 注意下面这句,只填充当前页要显示的数据,不能把所有数据全填充到DataSet中,否则无法实现分页
adapter.Fill(ds, AspNetPager1.PageSize * (AspNetPager1.CurrentPageIndex - 1), AspNetPager1.PageSize, "NEWS");
this.DataList1.DataSource = ds.Tables["NEWS"];
this.DataList1.DataBind();
}
protected void AspNetPager1_PageChanging(object src, PageChangingEventArgs e)
{
this.AspNetPager1.CurrentPageIndex = e.NewPageIndex;
BindData();
}
}
}
相信你能够看懂了代码吧!!!!
加油!!! 你会成功的!!!
另外,还要优化一下,比如,当用户量很大时,可能效率要很低了,所以,绑定时,仅仅需要提取你需要的数据行。相信有了上面的讲解,就直接贴代码了:
/// <summary>
/// 绑定会员
/// </summary>
private void BindMembersList(string userName,string sex)
{
Users user=new Users();
pager.RecordCount = user.GetUserCount(userName, sex);// 计算出总行数
DataTable dt_member = user.GetMemberByCondition(userName,sex,pager.PageSize*(pager.CurrentPageIndex-1),pager.PageSize);
gvMember.DataSource = dt_member;
gvMember.DataBind();
}
// 分页,转换页面
protected void pager_PageChanged(object sender, EventArgs e)
{
BindMembersList(txtAccount.Text.Trim(), ddlSex.SelectedValue);
}