天天看点

ASP.NET中DataList控件和AspNetPager控件的组合使用并实现分页

      我是一个初学者,所以关于“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);

        }