Eric的数据分页(演示+代码)

演示地址: Click Me! 分页方法很简单,也很有效率.

代码:

int pages = 5 ;
int pageSize = 7 ;
OleDbConnection conn = new OleDbConnection( " Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + HttpContext.Current.Server.MapPath( " Northwind.mdb " ));

void Page_Load( object sender, EventArgs e)
{
if ( ! IsPostBack)
{
dgBind(getSqlString( 1 ));
}

int firstPage = int .Parse(hidFirstPage.Value);
pnlButtons.Controls.Add(getPager(firstPage));
}

string getSqlString( int selectedPage)
{
string [] idsStrArray;
string sqlStr;

if (Session[ " idStr " ] != null )
{
idsStrArray = Session[ " idStr " ].ToString().Split( ' # ' );
}
else
{
sqlStr = " SELECT [产品ID] FROM [产品] ORDER BY [供应商ID] " ;
OleDbDataAdapter da = new OleDbDataAdapter(sqlStr, conn);
DataTable dt = new DataTable();
conn.Open();
da.Fill(dt);
conn.Close();
da.Dispose();
StringBuilder sb = new StringBuilder( "" );

for ( int i = 0 ; i < dt.Rows.Count; i ++ )
{
if ((i + 1 ) % pageSize == 0 )
{
sb.Append(dt.Rows[i][ 0 ].ToString() + " # " );
}
else
{
sb.Append(dt.Rows[i][ 0 ].ToString() + " , " );
}
}

sb.Remove(sb.Length - 1 , 1 );
idsStrArray = sb.ToString().Split( ' # ' );
Session[ " idStr " ] = sb.ToString();
}

hidPageCount.Value = idsStrArray.Length.ToString();
sqlStr = " SELECT [产品].[产品ID], [产品].[产品名称], [供应商].[公司名称], [类别].[类别名称] FROM " ;
sqlStr += " (([供应商] INNER JOIN [产品] ON [供应商].[供应商ID] = [产品].[供应商ID]) INNER JOIN [类别] ON " ;
sqlStr += " [类别].[类别ID] = [产品].[类别ID]) WHERE [产品ID] IN ( " + idsStrArray[selectedPage - 1 ] + " ) " ;
sqlStr += " ORDER BY [产品].[供应商ID] " ;
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)
{
OleDbDataAdapter da = new OleDbDataAdapter(sqlStr, conn);
DataTable dt = new DataTable();
conn.Open();
da.Fill(dt);
conn.Close();
da.Dispose();
dg.DataSource = dt;
dg.DataBind();
}

void dg_ItemDataBound( object sender, DataGridItemEventArgs e)
{
dg.Controls[ 0 ].EnableViewState = false ;
}

``` @ Import Namespace = " System.Text "

1![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif) ```
2  ![](http://www.cnblogs.com/Images/dot.gif) @ Import Namespace  =  "  System.Data.OleDb  "  

``` @ Import Namespace = " System.Data "

1![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif) &lt;%  ![](http://www.cnblogs.com/Images/dot.gif) &lt;S
Published At
Categories with Web编程
Tagged with
comments powered by Disqus