.net google,baiduスタイルのページングを実現
7076 ワード
プロジェクトを作成してDATALISTを使い、ページングの必要性から手動でページングの関数を書きました.個人はGOOGLEのページングがとても悪くないと感じて、インターネットを利用して資料を調べて、改正しました.
ここでは、データのページングに関するものではなく、HTMLコード付きのページングスタイル(文字列)を返すだけで、labelでページに表示してもよいし、thisで表示してもよい.Controls.Add(new LiteralControl(string));メソッドをページコントロールに追加します.
Demo1:
Demo2:
ページング・ストレージ・プロシージャを追加すれば、ほとんどのニーズを満たすことができます.
ページング・ストレージ・プロシージャ
ここでは、後で使用できる2つのページング・ストレージ・プロシージャを整理しました.
1つ目:
2番目:
本文はCSDNブログから来て、転載して出典を明記してください:http://blog.csdn.net/lcfgaoyong/archive/2006/04/20/670806.aspx
ここでは、データのページングに関するものではなく、HTMLコード付きのページングスタイル(文字列)を返すだけで、labelでページに表示してもよいし、thisで表示してもよい.Controls.Add(new LiteralControl(string));メソッドをページコントロールに追加します.
Demo1:
using System;
using System.Data;
using System.Configuration;
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 System.Text;
///
/// Pagenumber
///
public static class Pagenumber
{
///
///
///
public static string BuildPager(int totalRecords, int currentPage, int pageSize, int pid)
{
int alter = 4;
int startPage = 1;
int endPage = currentPage + alter;
int totalPages = CalculateTotalPages(totalRecords, pageSize);
if (currentPage > alter)
{
startPage = currentPage - alter;
}
if (endPage > totalPages)
{
endPage = totalPages;
}
string strTemp = @" {2} ";
StringBuilder sb = new StringBuilder("");
if (currentPage != startPage)
{
sb.Append(string.Format(strTemp, currentPage - 1, currentPage - 1, " "));
}
for (int i = startPage; i <= endPage; i++)
{
if (currentPage == i)
{
sb.Append(" " + i + " ");
}
else
{
sb.Append(string.Format(strTemp, i, i, "[" + i + "]"));
}
}
if (currentPage != endPage)
{
sb.Append(string.Format(strTemp, currentPage + 1, currentPage + 1, " "));
}
return sb.ToString();
}
/**/ ///
///
///
///
///
public static int CalculateTotalPages(int totalRecords, int pageSize)
{
int totalPagesAvailable;
totalPagesAvailable = totalRecords / pageSize;
// C# 0, 1
if ((totalRecords % pageSize) > 0)
totalPagesAvailable++;
return totalPagesAvailable;
}
}
Demo2:
/**
/// GOOGLE , , http://www.phpx.com/happy/viewthread.php?tid=99280&extra=&page=2, YourEyes
///
///
///
///
/// Url
private string pagination(int total,int per,int page,string query_string)
{
int allpage=0;
int next=0;
int pre=0;
int startcount=0;
int endcount=0;
string pagestr="";
if(page<1){page=1;}
//
if (per != 0)
{
allpage = (total / per);
allpage = ((total % per) != 0 ? allpage + 1 : allpage);
allpage = (allpage == 0 ? 1 : allpage);
}
next=page+1;
pre=page-1;
startcount=(page+5)>allpage?allpage-9:page-4;//
//
endcount = page<5 ? 10 : page+5;
if(startcount<1) {startcount=1;} // , 1 1
if(allpage1 ? "トップページ のページ": " ";
// , ,
for(int i=startcount;i<=endcount;i++)
{
pagestr+=page==i?" "+i+"":" "+ i +"";
}
pagestr+=page!=allpage ? " のページ のページ" : " ";
return pagestr;
}
ページング・ストレージ・プロシージャを追加すれば、ほとんどのニーズを満たすことができます.
ページング・ストレージ・プロシージャ
ここでは、後で使用できる2つのページング・ストレージ・プロシージャを整理しました.
1つ目:
ALTER procedure Consignment
@tablename varchar(80) ,
@strOrder varchar(50) ,
@PageIndex int = 1,
@PageSize int = 15,
@strGetFields varchar(200) = '*',
@OutPut int output
as
Begin
Declare @strSql varchar(500)
DECLARE @SQL NVARCHAR(1000)
DECLARE @R BIGINT
SET @SQL= N'select @R=count(*) from '+@TableName
EXEC SP_EXECUTESQL @SQL, N' @R BIGINT OUTPUT', @R OUTPUT
SET @OutPut= @R
if(@PageIndex =1)
Begin
set @strSql='select top '+str(@PageSize)+' '+@strGetFields+' from '+@tablename+' order by '+@strOrder
End
Else
set @strSql='select top '+str(@PageSize)+' '+@strGetFields+' from '+@tablename+' where ('+@strOrder
+' >= ( select Max('+@strOrder+') from ( select top '+str(@PageSize*@PageIndex)+' * from '+@tablename+' order by '
+@strOrder+' ) as tempTable)) order by '+ @strOrder
select @strSql
exec(@strSql)
End
2番目:
alter procedure AllProce
@tablename varchar(200) , --
@strGetFields varchar(200) = '*', --
@PageIndex int = 1 , --
@pageSize int = 15, --
@strWhere varchar(100) = '', --
@strOrder varchar(100) = '', --
@intOrder bit = 0, -- 1
@CountAll bigint output --
as
begin
declare @strSql varchar(500) --
declare @strTemp varchar(100) --
declare @strOrders varchar(50) --
declare @table varchar(70)
declare @SQL nvarchar(1000)
declare @R bigint
set @SQL= N'select @R=count(*) from '+convert(nvarchar(200),@TableName)
exec SP_EXECUTESQL @SQL, N' @R BIGINT OUTPUT', @R OUTPUT
set @CountAll= @R
if @intOrder = 0
begin
-- 0
set @strTemp = '>(select max'
set @strOrders = ' order by '+@strOrder+' asc '
end
else
begin
--
set @strTemp = '
本文はCSDNブログから来て、転載して出典を明記してください:http://blog.csdn.net/lcfgaoyong/archive/2006/04/20/670806.aspx