轉帖|其它|編輯:郝浩|2011-09-01 15:01:27.000|閱讀 1594 次
概述:一般開發綁定數據的時候,Repeater控件是非常好用的控件,但是很多.net開發人員苦惱于無法分頁,于是開發一個基于Repeater的分頁控件,現在拿出來和大家一起分享分享。寫得不好大家可以盡管拍磚,源碼在本文后面。其實這個分頁控件非常簡單,分頁控件只是根據記錄數和當前頁數等設置而輸出一個分頁導航條而已,并沒有參與真正的分頁,具體如何從數據庫讀取分頁數據,還需自己編寫存儲過程或者sql來實現。廢話少說,簡單介紹一下控件的功能:
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
一般開發綁定數據的時候,Repeater控件是非常好用的控件,但是很多.net開發人員苦惱于無法分頁,于是開發一個基于Repeater的分頁控件,現在拿出來和大家一起分享分享。寫得不好大家可以盡管拍磚,源碼在本文后面。其實這個分頁控件非常簡單,分頁控件只是根據記錄數和當前頁數等設置而輸出一個分頁導航條而已,并沒有參與真正的分頁,具體如何從數據庫讀取分頁數據,還需自己編寫存儲過程或者sql來實現。廢話少說,簡單介紹一下控件的功能:
* 支持數字分頁
* 支持分頁下拉框
* 支持輸入跳轉分頁
* 同一個頁面支持多個分頁。
* 支持默認、中文、英文等模式使用。
* 內含漂亮且簡潔的Css樣式。
* 可自定義Css樣式。
* 更多特點由你來發現。
一、分頁控件的屬性:
---可顯示設置屬性
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)插入代碼:
1 <asp:Repeater ID="repList" runat="server">
2 <HeaderTemplate>
3 <table id="FLTable">
4 <tr>
5 <th>
6 ID
7 </th>
8 <th>
9 方案名稱
10 </th>
11 <th>
12 描述
13 </th>
14 <th>
15 創建人
16 </th>
17 <th>
18 創建時間
19 </th>
20 </tr>
21 </HeaderTemplate>
22 <ItemTemplate>
23 <tr>
24 <td>
25 <%#Eval("SlnID")%>
26 </td>
27 <td>
28 <%#Eval("SlnName")%>
29 </td>
30 <td>
31 <%#Eval("Desc")%>
32 </td>
33 <td>
34 <%#Eval("Creater")%>
35 </td>
36 <td>
37 <%#Eval("CreateTime","{0:yyyy-MM-dd:HH:mm:ss}")%>
38 </td>
39 </tr>
40 </ItemTemplate>
41 <FooterTemplate>
42 </table>
43 </FooterTemplate>
44 </asp:Repeater>
45
46
47 <cc1:pager id="Pager1" runat="server">
48 </cc1:pager>
這樣我們就把整個控件加入進去了。
3.后臺綁定數據源及初始化控件
編寫一個讀取分頁數據函數,例如(里面讀取和分頁過程略):
public DataTable GetDataList(int pageSize, int pageIndex, out int records)
{
DataTable dt; //返回的數據集
//.... //(從數據庫讀取數據省略)
records = ...; //賦值給總記錄數(省略)
return dt;
}
至于如何讀取分頁數據,建議用存儲過程進行分頁,給出一個支持多表查詢(Left join等)的存儲過程分頁:
分頁存儲過程SQL
-- =============================================
-- Foolin收集(來自網上,佚名)
-- Create date: 2010-09-22
-- Description: 存儲過程分頁,支持分頁查詢
-- 調用:(排序ASC不可少)
-- exec Wb_Page 'select * from [YouTable] ', 20, 0, 'CreateTime ASC, Money DESC'
-- =============================================
CREATE PROCEDURE [dbo].[SP_Page]
(
@Sql nvarchar(1024), --查詢語句
@Sort nvarchar(100) = '', --排序字段
@PageSize int = 20, --分頁大小
@PageIndex int = 1, --分頁索引
@TotalCount int = 0 output --總數
)
AS
-- 值默認值
if (IsNUll(@PageSize,0)=0)
Set @PageSize=20
if (IsNull(@PageIndex,0)=0)
Set @PageIndex=1
set nocount on
/*聲明查詢字符串*/
declare @strSQL nvarchar(4000)
set @strSQL = ' select @TotalCount=count(*) from ('+@Sql+') as t '
/*取得查詢結果總數*/
exec sp_executesql
@strSQL,
N'@TotalCount int=0 OUTPUT',
@TotalCount=@TotalCount OUTPUT
declare @ItemCount int
declare @_PageIndex int
set @_PageIndex = @PageIndex; --索引從1開始
--set @_PageIndex = @PageIndex + 1; --索引從0開始
/*確定搜索邊界*/
set @ItemCount = @TotalCount - @PageSize * @_PageIndex
if(@ItemCount < 0)
set @ItemCount = @ItemCount + @PageSize
else
set @ItemCount = @PageSize
if(@ItemCount < 0) return 1
if(@Sort != '')
begin
/*聲明排序變量*/
declare @IndexSort1 nvarchar(50), @IndexSort2 nvarchar(50),
@Sort1 nvarchar(50), @Sort2 nvarchar(50)
SET @Sort1 = @Sort
SET @Sort2 = Replace(Replace(Replace(@Sort, 'DESC', '
@SORT'), 'ASC', 'DESC'), '@SORT', 'ASC')
set @strSQL = 'SELECT * FROM
(SELECT TOP ' + STR(@ItemCount) + ' * FROM
(SELECT TOP ' + STR(@PageSize * @_PageIndex) + ' * FROM
('+@Sql+') AS t0
ORDER BY '+@Sort1 +') AS t1
ORDER BY '+@Sort2 +') AS t2
ORDER BY ' +@Sort
end
else
begin
set @strSQL = 'SELECT * FROM
(SELECT TOP ' + STR(@ItemCount) + ' * FROM
(SELECT TOP ' + STR(@PageSize * @_PageIndex) + ' * FROM
('+@Sql+') As t0)
aS t1)
AS t2'
end
exec sp_executesql
@strSQL
后臺aspx.cs頁面綁定Repeater數據源、初始化控件:
1 int records = 0; //定義輸出全部記錄數變量
2 repList.DataSource = GetDataList(Pager1.PageSize, Pager1.
PageIndex, out records); //獲取數據源
3 repList.DataBind(); //綁定數據
4 Pager1.SetPage(totalCount); //初始化分頁,總記錄數作為參數傳入。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載