码迷,mamicode.com
首页 > 其他好文 > 详细

Repeater控件-2

时间:2015-02-08 00:22:56      阅读:275      评论:0      收藏:0      [点我收藏+]

标签:

 

本文转自:http://www.cnblogs.com/foolin/archive/2011/08/31/2161342.html

 

文章最后更新于2011年9月2日,增加Demo代码。 

 

    一般开发绑定数据的时候,Repeater控件是非常好用的控件,但是很多.net开发人员苦恼于无法分页,于是开发一个基于Repeater的分页控件,现在拿出来和大家一起分享分享。写得不好大家可以尽管拍砖,源码在本文后面。其实这个分页控件非常简单,分页控件只是根据记录数和当前页数等设置而输出一个分页导航条而已,并没有参与真正的分页,具体如何从数据库读取分页数据,还需自己编写存储过程或者sql来实现。废话少说,简单介绍一下控件的功能:

  • ·支持数字分页
  • 支持分页下拉框
  • 支持输入跳转分页
  • 同一个页面支持多个分页。
  • 支持默认、中文、英文等模式使用。
  • 内含漂亮且简洁的Css样式。
  • 可自定义Css样式。
  • 虽为Repeater开发的,但不局限于Repeater,也适用于其它数据绑定控件!
  • 更多特点由你来发现。


一、分页控件的属性:

---可显示设置属性
 ID  //分页控件ID(同页内必须唯一) (string)
 CssClass     // Css样式    (string)
 ShowPreNext    //是否显示上一页下一页  (bool)
 ShowPageNum    //是否显示页码连接  (bool)
 PageSplitNum    //页码隔多少数字 (int:当ShowPageNum属性为true时生效)
 ShowPageTips   //是否显示当前页、记录数等信息 (bool)
 ShowPageJump   //是否显示下来框跳转  (bool)
 ShowPageGo     //是否显示输入页码跳转  (bool)
 ShowPageLan //显示语言的类型  (int: 0 - 默认, 1 - 中文, 2 - 英语)

---不可显示设置属性
 PageSize    //每页记录数(int)
 PageIndex   //当前页码(int)
 PageTotal   //总页数(int:只读)
 Records     //总记录数(int)

 

二、分页控件的方法:


 void SetPage(int records);
 ------ 函数说明 ------
 功能:初始化分页控件
 参数:records - 总记录数
 输出:无


三、控件使用说明:

 

1. 引用控件到项目中

把控件Ling.Pager.dll引入到项目中,也就是直接复制这个dll到站点的bin目录下。

 

2. 前台Aspx加入控件Page1

在前台aspx顶部加入代码:

<%@ Register Assembly="Ling.Pager" Namespace="Ling.Pager" TagPrefix="cc1" %>

 

接着在前台aspx页面需要插入分页条的位置(如Repeater的底部)插入代码:

技术分享
        
<asp:Repeater ID="repList" runat="server">
<HeaderTemplate>
<table>
<tr>
<th>ID</th>
<th>地区</th>
<th>所属省份</th>
<th>拼音</th>
<th>区号</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#Eval("AreaID") %></td>
<td><%#Eval("AreaName") %></td>
<td><%#Eval("Province") %></td>
<td><%#Eval("Area") %></td>
<td><%#Eval("RegionNO") %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>

<cc1:Pager ID="Pager1" runat="server">
</cc1:Pager>
技术分享

这样我们就把整个控件加入进去了。

 

 

3.后台绑定数据源及初始化控件

至于如何读取分页数据,建议用存储过程进行分页,给出一个支持多表查询(Left join等)的存储过程分页:

 1 分页存储过程SQL
 2 
 3 -- =============================================
 4 -- Foolin收集(来自网上,佚名)
 5 -- Create date: 2010-09-22
 6 -- Description:    存储过程分页,支持分页查询
 7 -- 调用:(排序ASC不可少)
 8 --       exec Wb_Page ‘select * from [YouTable] ‘, 20, 0, ‘CreateTime ASC,  Money DESC‘ 
 9 -- =============================================
10 CREATE PROCEDURE [dbo].[SP_Page]
11 (
12  @Sql nvarchar(1024),   --查询语句
13  @Sort nvarchar(100) = ‘‘,    --排序字段
14  @PageSize int = 20,    --分页大小
15  @PageIndex int = 1,    --分页索引
16  @TotalCount int = 0 output --总数    
17 )
18 AS
19 
20 -- 值默认值
21 if (IsNUll(@PageSize,0)=0)
22     Set @PageSize=20
23 if (IsNull(@PageIndex,0)=0)
24     Set @PageIndex=1
25 
26 set nocount on
27 /*声明查询字符串*/
28 declare @strSQL nvarchar(4000)
29 
30 set @strSQL =  select @TotalCount=count(*) from (+@Sql+) as t  
31 
32 /*取得查询结果总数*/
33 exec sp_executesql
34 @strSQL, 
35 N@TotalCount int=0 OUTPUT, 
36 @TotalCount=@TotalCount OUTPUT 
37 
38 declare @ItemCount int 
39 declare @_PageIndex int
40 
41 set @_PageIndex = @PageIndex; --索引从1开始
42 --set @_PageIndex = @PageIndex + 1; --索引从0开始
43 
44 /*确定搜索边界*/
45 set @ItemCount = @TotalCount - @PageSize * @_PageIndex
46 
47 if(@ItemCount < 0) 
48     set @ItemCount = @ItemCount + @PageSize 
49 else 
50     set @ItemCount = @PageSize 
51 
52 if(@ItemCount < 0) return 1 
53 
54 if(@Sort != ‘‘)
55 begin
56     /*声明排序变量*/
57     declare @IndexSort1 nvarchar(50), @IndexSort2 nvarchar(50), @Sort1 nvarchar(50), @Sort2 nvarchar(50)
58     
59     SET @Sort1 = @Sort
60     SET @Sort2 = Replace(Replace(Replace(@Sort, DESC, @SORT), ASC, DESC), @SORT, ASC)
61 
62     set @strSQL = SELECT * FROM 
63     (SELECT TOP  + STR(@ItemCount) +  * FROM 
64     (SELECT TOP  + STR(@PageSize * @_PageIndex) +  * FROM 
65     (+@Sql+) AS t0 
66     ORDER BY +@Sort1 +) AS t1 
67     ORDER BY +@Sort2 +) AS t2 
68     ORDER BY  +@Sort 
69 end
70 else
71 begin
72     set @strSQL = SELECT * FROM 
73     (SELECT TOP  + STR(@ItemCount) +  * FROM 
74     (SELECT TOP  + STR(@PageSize * @_PageIndex) +  * FROM 
75     (+@Sql+) As t0) 
76     aS t1) 
77     AS t2
78 end
79 
80 exec sp_executesql 
81 @strSQL

 

 

后台aspx.cs页面绑定Repeater数据源、初始化控件:

  1 Demo后台处理代码
  2 
  3 using System;
  4 using System.Collections.Generic;
  5 using System.Linq;
  6 using System.Web;
  7 using System.Web.UI;
  8 using System.Web.UI.WebControls;
  9 using System.Data;
 10 using System.Data.SqlClient;
 11 
 12 public partial class _Default : System.Web.UI.Page
 13 {
 14 
 15     private string connectionString = "server=(local)\\SQL2005;database=LingPager;uid=sa;pwd=123456 ";   //数据库连接字符串
 16 
 17     protected void Page_Load(object sender, EventArgs e)
 18     {
 19         if (!IsPostBack)
 20         {
 21             BindDataList();
 22         }
 23     }
 24 
 25 
 26     protected void BindDataList()
 27     {
 28         //string strSql = @"SELECT *, ‘--‘ AS Province FROM T_Area";    //普通SQL语句
 29         string strSql = @"
 30             SELECT A.AreaID, A.Area, A.AreaName, A.RegionNO, IsNull(B.AreaName,‘--‘) AS Province
 31             FROM T_Area A
 32             LEFT JOIN T_Area B
 33             ON A.ParentID=B.AreaID
 34         ";  //多表查询SQL语句
 35 
 36         //排序字段,必须,注意ASC不可以省略
 37         string fieldOrder = "Province ASC";
 38 
 39         int records = 0;    //总记录数
 40 
 41         //绑定数据
 42         repList.DataSource = GetDataList(strSql, fieldOrder, Pager1.PageSize, Pager1.PageIndex, out records);   //读取数据源并绑定
 43         repList.DataBind();
 44 
 45         //设置页面(必须)
 46         Pager1.SetPage(records);    //初始化分页条
 47 
 48 
 49         /************ Pager属性设置(可选)  *********/
 50         //Pager1.ShowPageJump = true;
 51         Pager1.ShowPageGo = true;
 52         Pager1.ShowPageLan = 0; //导航条语言:0=默认,1=中文,2=英语
 53         //更多设置....
 54         /************ Pager 属性 *********/
 55 
 56     }
 57 
 58 
 59     /// <summary>
 60     /// 取数据接口
 61     /// </summary>
 62     /// <param name="strSql"></param>
 63     /// <param name="fieldOrder"></param>
 64     /// <param name="pageSize"></param>
 65     /// <param name="pageIndex"></param>
 66     /// <param name="records"></param>
 67     /// <returns></returns>
 68     public DataTable GetDataList(string strSql, string fieldOrder, int pageSize, int pageIndex, out int records)
 69     {
 70         DataTable dt = null;         //返回的数据集   
 71         records = 0;    //事先赋值
 72 
 73         using (SqlConnection sqlConn = new SqlConnection(connectionString))
 74         {
 75             //打开连接
 76             sqlConn.Open();
 77 
 78             //初始化参数
 79             
 80 
 81             SqlCommand sqlCmd = new SqlCommand();
 82             sqlCmd.Connection = sqlConn;
 83             sqlCmd.CommandText = "SP_Page";
 84             sqlCmd.CommandType = CommandType.StoredProcedure;
 85 
 86             #region  ___存储过程参数___
 87             SqlParameter recordsParam = new SqlParameter("@TotalCount", SqlDbType.Int, 32);
 88             recordsParam.Direction = ParameterDirection.Output;
 89             //创建
 90             sqlCmd.Parameters.Add(new SqlParameter("@Sql", SqlDbType.NVarChar, 1024));
 91             sqlCmd.Parameters.Add(new SqlParameter("@Sort", SqlDbType.NVarChar, 100));
 92             sqlCmd.Parameters.Add(new SqlParameter("@PageSize", SqlDbType.Int, 32));
 93             sqlCmd.Parameters.Add(new SqlParameter("@PageIndex", SqlDbType.Int, 32));
 94             sqlCmd.Parameters.Add(recordsParam);
 95             //赋值
 96             sqlCmd.Parameters[0].Value = strSql;
 97             sqlCmd.Parameters[1].Value = fieldOrder;
 98             sqlCmd.Parameters[2].Value = pageSize;
 99             sqlCmd.Parameters[3].Value = pageIndex;
100             sqlCmd.Parameters[4].Direction = ParameterDirection.Output;
101             #endregion ___存储过程参数___
102 
103             //取数据
104             DataSet ds = new DataSet();
105             SqlDataAdapter sda = new SqlDataAdapter(sqlCmd);
106             sda.Fill(ds);
107             if (ds != null && ds.Tables.Count > 0)
108             {
109                 dt = ds.Tables[0];
110             }
111 
112             records = (int)recordsParam.Value;  //返回记录数
113 
114             //释放资源
115             if (sqlConn != null)
116             {
117                 sqlConn.Close();
118                 sqlConn.Dispose();
119             }
120 
121         }
122 
123 
124         return dt;
125     }
126 
127 }

 

源码下载:点击下载

 

本文转自:http://www.cnblogs.com/foolin/archive/2011/08/31/2161342.html

 

Repeater控件-2

标签:

原文地址:http://www.cnblogs.com/KTblog/p/4279563.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!