运行截图:
数据表结构:
megaid int IDENTITY (1, 1) NOT NULL PRIMARY KEY CLUSTERED
megaguid char (36) NOT NULL INDEX
数据生成脚本:
DECLARE @i int
SET @i = 1
WHILE @i < 1000001
BEGIN
INSERT INTO megatable (megaguid) VALUES ( NEWID ())
SET @i = @i + 1
END
GO
C#代码:
DateTime startTime;
void Page_Init(Object sender, EventArgs e)
{
startTime = DateTime.Now;
}
protected override void Render(HtmlTextWriter writer)
{
base .Render(writer);
Response.Write( " 本页执行时间: " + (DateTime.Now - startTime));
}
int records = 10000 ;
int pages = 10 ;
int pageSize = 15 ;
SqlConnection conn = new SqlConnection( " Server=(local);Database=megadata;User Id=sa;Password=xxx " );
void Page_Load( object sender, EventArgs e)
{
if ( ! IsPostBack)
{
dgBind(getSqlString( 1 ));
}
int firstPage = int .Parse(hidFirstPage.Value);
pnlButtons.Controls.Add(getPager(firstPage));
lblPrompt.Text = " 数据提取范围:
1<b>SELECT TOP " \+ records.ToString() \+ " megaid FROM megatable ORDER BY megaguid</b>
" ;
}
string getSqlString( int selectedPage)
{
string [] idsStrArray;
string sqlStr;
if (Session[ " idStr " ] != null )
{
idsStrArray = Session[ " idStr " ].ToString().Split( ' # ' );
}
else
{
sqlStr = " SELECT TOP " + records.ToString() + " megaid FROM megatable ORDER BY megaguid " ;
SqlCommand cmd = new SqlCommand(sqlStr, conn);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
StringBuilder sb = new StringBuilder( "" );
int n = 1 ;
while (dr.Read())
{
if (n % pageSize == 0 )
{
sb.Append(dr[ 0 ].ToString() + " # " );
}
else
{
sb.Append(dr[ 0 ].ToString() + " , " );
}
n ++ ;
}
dr.Close();
conn.Close();
sb.Remove(sb.Length - 1 , 1 );
idsStrArray = sb.ToString().Split( ' # ' );
Session[ " idStr " ] = sb.ToString();
}
hidPageCount.Value = idsStrArray.Length.ToString();
sqlStr = " SELECT megaid, megaguid FROM megatable WHERE megaid IN ( " + idsStrArray[selectedPage - 1 ] + " ) " ;
sqlStr += " ORDER BY megaguid " ;
return sqlStr;
}
Panel getPager( int firstPage)
{
int pageCount = int .Parse(hidPageCount.Value);
Panel pnlPager = new Panel();
pnlPager.Controls.Add( new LiteralControl( "
1<br/>
共 " + pageCount.ToString() + " 页 " ));
pnlPager.Controls.Add(getLinkButton( " Fst " , " 首页 " , " pgBtn " , " 1 " ));
pnlPager.Controls.Add( new LiteralControl( " " ));
if (firstPage > 0 )
{
pnlPager.Controls.Add(getLinkButton( " Pre " , " 前 " + pages.ToString() + " 页 " , " pgBtn " , (firstPage - pages + 1 ).ToString()));
pnlPager.Controls.Add( new LiteralControl( " " ));
}
for ( int i = firstPage + 1 ; i < firstPage + pages + 1 ; i ++ )
{
if (i > pageCount)
{
break ;
}
pnlPager.Controls.Add(getLinkButton(i.ToString(), " [ " + i.ToString() + " ] " , " pgBtn " , i.ToString()));
pnlPager.Controls.Add( new LiteralControl( " " ));
}
if (firstPage + pages < pageCount)
{
pnlPager.Controls.Add(getLinkButton( " Nxt " , " 后 " + pages.ToString() + " 页 " , " pgBtn " , (firstPage + pages + 1 ).ToString()));
pnlPager.Controls.Add( new LiteralControl( " " ));
}
pnlPager.Controls.Add(getLinkButton( " Lst " , " 末页 " , " pgBtn " , pageCount.ToString()));
return pnlPager;
}
LinkButton getLinkButton( string lbId, string lbText, string lbCmdName, string lbCmdArg)
{
LinkButton lb = new LinkButton();
lb.ID = lbCmdName + lbId;
lb.Text = lbText;
lb.CommandName = lbCmdName;
lb.CommandArgument = lbCmdArg;
lb.Command += new CommandEventHandler(pageTurn);
return lb;
}
void pageTurn( object sender, CommandEventArgs e)
{
LinkButton lb = (LinkButton)sender;
int selectedPage = int .Parse(lb.CommandArgument);
int firstPage = selectedPage / pages * pages;
firstPage = (selectedPage % pages == 0 ) ? (firstPage - pages) : firstPage;
hidFirstPage.Value = firstPage.ToString();
dgBind(getSqlString(selectedPage));
pnlButtons.Controls.RemoveAt(pnlButtons.Controls.Count - 1 );
pnlButtons.Controls.Add(getPager(firstPage));
lb = (LinkButton)pnlButtons.Controls[pnlButtons.Controls.Count - 1 ].FindControl( " pgBtn " + selectedPage.ToString());
lb.Enabled = false ;
}
void dgBind( string sqlStr)
<IMG id=Codehighlighter1_3929_4132_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_3929_4132_Closed_Text.style.display='none'; Codehighlighter1_3929_4132_Open_Image.style.display='inline'; Codehighlighter1_3929_4132_Open_Text.style.display