小试牛刀_浅谈AspNetPager在三层架构中的使用

AspNetPager第三方分页控件介绍

 

      AspNetPager针对ASP.NET分页控件的不足,提出了与众不同的解决asp.net中分页问题的方案,即将分页导航功能与数据显示功能完全独立开来,由用户自己控制数据的获取及显示方式,因此可以被灵活地应用于任何需要实现分页导航功能的地方,如为GridView、DataList以及Repeater等数据绑定控件实现分页、呈现自定义的分页数据以及制作图片浏览程序等,因为AspNetPager控件和数据是独立的,因此要分页的数据可以来自任何数据源,如SQL Server、Oracle、Access、mysql、DB2等数据库以及XML文件、内存数据或缓存中的数据、文件系统等等。

 
AspNetPager的主要功能

 

1、支持通过Url进行分页
2、支持Url分页方式下的Url重写(UrlRewrite)功能
3、支持使用用户自定义图片做为导航元素
4、功能强大灵活、使用方便、可定制性强
5、增强的 Visual Studio 2005、Visual Studio 2008和Visual Studio 2010设计时支持
6、丰富而完整的控件文档和示例项目
 
AspNetPager使用示例

首先在VS中添加对AspNetPager.dll的引用,右键工具栏,选择"选择项" ,如图:

 

这个过程时间可能会有点长,需要等待,然后在弹出的对话框中选择本地文件夹中的AspNetPager.dll文件,点击打开,之后就将这个控件添加到了VS2010的工具栏中了,如图:

 

 然后就可以将该分页控件拖拉到页面需要使用分页控件的地方,效果如图:

 

点击右边的小三角形可以进行控件显示的设置和存储过程的配置,如图:

 

这里一些导航文字,信息取显示方式,索引文本的设置就不再赘述了,设置比较简单,直接贴效果:

 

下面讲讲存储过程生成工具项的设置,点击该项,效果如图: 

 

然后来看看自动生成的T-SQL语句,语句此处不做解释,直接点执行,在数据库中添加该存储过程即可

 

个人在使用的时候,没用用到@docount bit该参数,故在下面的介绍中,我使用的存储过程中把该参数删除了。。。

好了,存储过程准备就绪了,就开始看代码了,首先来看看现在分页控件的html源代码:

 

 然后需要再进行手动的配置,个人比较喜欢直接在代码里配置属性,当然也可以在属性栏进行配置,我们需要加上三个属性:


PageSize:每页显示的数目大小(也可以在后台代码端设置)

LayoutType:呈现方式,有Div方式和表格方式

AlwaysShow:分页时会出现一种情况,就是用户的数据数量小于每页显示的数据数目,这时,会默认不显示分页控件,如果用户设置强制显示,就将该属性设为true即可

 

经过以上过程,页面及页面端的设置已经完成了,接下来要开始书写后台代码了,直接贴代码:

 

BLL层:

Getpages方法:

View Code
 1 /// <summary>
 2         /// 获取分页的数据
 3         /// </summary>
 4         /// <param name="startPage">起始页</param>
 5         /// <param name="endPage">结束页</param>
 6         /// <returns></returns>
 7         public List<CustomerInfo> GetPages(int startPage, int endPage)
 8         {
 9             return IcustomerDal.GetPages(startPage, endPage);
10         }

 

 GetCount方法:

View Code
1 /// <summary>
2         /// 返回总的记录数
3         /// </summary>
4         /// <returns></returns>
5         public int GetCount()
6         {
7             return IcustomerDal.GetCount();
8         }

 

 

IDAL接口层:

View Code
 1 namespace PetShopDemo.IDAL
 2 {
 3     public interface ICustomerInfoDAL
 4     {
 5 
 6         int GetCount();
 7         List<CustomerInfo> GetPages(int startPage, int endPage);
 8 
 9         
10     }
11 }

 

 

DAL层:

GetPages() 方法:

View Code
 1  //获取分页的数据
 2         public List<CustomerInfo> GetPages(int startPage, int endPage)
 3         { 
 4             SqlParameter[] parameters=
 5             {
 6                 new SqlParameter("@startIndex",startPage),
 7                 new SqlParameter("@endIndex",endPage)
 8             };
 9 
10             DataSet ds = DbHelperSQL.GetDataSetByProc(CommandType.StoredProcedure, "proc_CustomerInfo_Fy", parameters);
11             List<CustomerInfo> customerInfos = new List<CustomerInfo>();
12             CustomerInfo customer = null;
13 
14             DataTable dt=ds.Tables[0];
15 
16             int Count = dt.Rows.Count;
17 
18             for (int i = 0; i < Count; i++)
19             {
20                 customer = new CustomerInfo();
21                 customer.CustomId = dt.Rows[i]["CustomId"].ToString();
22                 customer.CustomName = dt.Rows[i]["CustomName"].ToString();
23                 customer.CompanyAddr = dt.Rows[i]["CompanyAddr"].ToString();
24                 customer.Tel = dt.Rows[i]["Tel"].ToString();
25                 customer.Memo = dt.Rows[i]["Memo"].ToString();
26 
27                 customerInfos.Add(customer);
28             }
29 
30             return customerInfos;
31         }
32     }

 

GetCount() 方法:

View Code
1  //返回总的记录数
2         public int GetCount()
3         {
4             string sql = "select count(*) from CustomInfo";
5             int result = (int)DbHelperSQL.GetSingle(sql);
6             return result;
7         }

 

 

Utility层:

GetSingle() 方法:

View Code
 1  /// <summary>
 2         /// 执行一条计算查询结果语句,返回查询结果(object)。
 3         /// </summary>
 4         /// <param name="SQLString">计算查询结果语句</param>
 5         /// <returns>查询结果(object)</returns>
 6         public static object GetSingle(string SQLString)
 7         {
 8             using (SqlConnection connection = new SqlConnection(connectionString))
 9             {
10                 using (SqlCommand cmd = new SqlCommand(SQLString, connection))
11                 {
12                     try
13                     {
14                         connection.Open();
15                         object obj = cmd.ExecuteScalar();
16                         if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
17                         {
18                             return null;
19                         }
20                         else
21                         {
22                             return obj;
23                         }
24                     }
25                     catch (System.Data.SqlClient.SqlException e)
26                     {
27                         connection.Close();
28                         throw e;
29                     }
30                 }
31             }
32         }

 

GetDataSetByProc() 方法

View Code
 1  /// <summary>
 2         /// 获取DataSet数据集(通过存储过程)
 3         /// </summary>
 4         /// <param name="type">CommandType类型</param>
 5         /// <param name="procName">存储过程名</param>
 6         /// <param name="parameters">参数</param>
 7         public static DataSet GetDataSetByProc(CommandType type, string procName, params SqlParameter[] parameters)
 8         {
 9             using (SqlConnection conn = new SqlConnection(connectionString))
10             {
11                 conn.Open();
12                 using (SqlCommand cmd = new SqlCommand())
13                 {
14                     cmd.Connection = conn;
15                     cmd.CommandText = procName;
16                     cmd.CommandType = type;
17                     cmd.Parameters.AddRange(parameters);
18                     using (SqlDataAdapter da = new SqlDataAdapter(cmd))
19                     {
20                         using (DataSet ds = new DataSet())
21                         {
22                             try{ da.Fill(ds);return ds; }
23                             catch (SqlException)
24                             {
25                                 return null;
26                             }
27                             finally
28                             {
29                                 conn.Close();
30                             }
31                             
32                         }
33                     }
34                 }
35             }
36         }

 


最后是UI层的调用:

首先页面一开始载入的时候就要对分页控件进行绑定 以及对Repeater控件数据源进行绑定

一开始页面Page_Load时就调用BindCustomInfo()自定义绑定方法:

View Code
1 protected void Page_Load(object sender, EventArgs e)
2     {
3         if (!IsPostBack)
4         {
5             //调用自定义绑定方法
6             BindCustomInfo();
7         }
8     }

 

BindCustomInfo() 方法:

View Code
 1  //自定义载入绑定
 2     public void BindCustomInfo()
 3     {
 4         //设置分页控件的总页数
 5         AspNetPager1.RecordCount = new CustomerInfoBLL().GetCount();
 6         //每页显示数目
 7         int pageSize=AspNetPager1.PageSize;
 8         //当前页索引
 9         int currentPage=AspNetPager1.CurrentPageIndex;
10         //根据分页控件的当前索引页和每页大小来获取对应数据集 绑定repeater控件数据源
11         CustManRepeater.DataSource = new CustomerInfoBLL().GetPages(pageSize * (currentPage - 1)+ 1, pageSize * currentPage);
12         //绑定方法
13         CustManRepeater.DataBind();
14     }

 

 最重要的是不要忘记了,每当分页控件的索引页发生变化时都要进行数据的重新获取和绑定,所以要给分页控件添加PageChanged事件,在该事件中添加自定义绑定事件:

View Code
1 protected void AspNetPager1_PageChanged(object sender, EventArgs e)
2     {
3         //调用自定义绑定方法
4         BindCustomInfo();
5     }

 

至此,这个分页控件的全部设置算是大致完成了,接下来测试,看看效果:

首先第一页:

 

点击下一页:

 

 呵呵,,其他的就不测试了,都没有问题,至此,整个分页就完成了,,,

当然这个样式可以自行更改,我这个比较寒酸了点了,,呵呵,,,

 

 分页控件下载地址:

 /Files/holyknight-zld/AspNetPager/AspNetPager732DLL.rar

 

 

posted @ 2012-07-11 17:16  HolyKnight  阅读(1458)  评论(2编辑  收藏  举报