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 
- 11);
            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("<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"  %>
<% @ Import Namespace="System.Data.OleDb"  %>
<% @ Import Namespace="System.Data"  %>
<% @ Page Language="C#"  %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" >
< HTML >
    
< HEAD >
        
< TITLE > Dynamic Buttons </ TITLE >
        
< SCRIPT  runat ="server" >
        
//插入上面的C#代码
        
</ SCRIPT >
        
< STYLE > BODY { FONT-SIZE: 9pt; FONT-FAMILY: Tahoma,宋体; TEXT-ALIGN: center }
    TD 
{ FONT-SIZE: 9pt; FONT-FAMILY: Tahoma,宋体; TEXT-ALIGN: center }
    
</ STYLE >
    
</ HEAD >
    
< BODY >
        
< FORM  id ="form1"  runat ="server" >
            
< DIV >
                
< ASP:LABEL  id ="lblPrompt"  runat ="server"  text ="?"  enableviewstate ="False"  enabletheming ="True" ></ ASP:LABEL >
                
< BR >
                
< BR >
                
< BR >
                
< ASP:PANEL  id ="pnlButtons"  runat ="server"  width ="560px" >
                    
< INPUT  id ="hidFirstPage"  type ="hidden"  value ="0"  runat ="server" >< INPUT  id ="hidPageCount"  type ="hidden"  runat ="server" >
                    
< ASP:DATAGRID  id ="dg"  runat ="server"  width ="100%"  pagesize ="5"  autogeneratecolumns ="False"  bordercolor ="#CC9966"
                        borderstyle
="None"  borderwidth ="1px"  backcolor ="White"  cellpadding ="4"  onitemdatabound ="dg_ItemDataBound" >
                        
< FOOTERSTYLE  forecolor ="#330099"  backcolor ="#FFFFCC" ></ FOOTERSTYLE >
                        
< HEADERSTYLE  font-bold ="True"  forecolor ="#FFFFCC"  backcolor ="#990000" ></ HEADERSTYLE >
                        
< PAGERSTYLE  horizontalalign ="Center"  forecolor ="#330099"  backcolor ="#FFFFCC" ></ PAGERSTYLE >
                        
< SELECTEDITEMSTYLE  font-bold ="True"  forecolor ="#663399"  backcolor ="#FFCC66" ></ SELECTEDITEMSTYLE >
                        
< ITEMSTYLE  forecolor ="#330099"  backcolor ="White" ></ ITEMSTYLE >
                        
< COLUMNS >
                            
< ASP:BOUNDCOLUMN  datafield ="产品ID"  headertext ="产品ID" >
                                
< HEADERSTYLE  width ="60px" ></ HEADERSTYLE >
                            
</ ASP:BOUNDCOLUMN >
                            
< ASP:BOUNDCOLUMN  datafield ="产品名称"  headertext ="产品名称" ></ ASP:BOUNDCOLUMN >
                            
< ASP:BOUNDCOLUMN  datafield ="公司名称"  headertext ="供应商" >
                                
< HEADERSTYLE  width ="80px" ></ HEADERSTYLE >
                            
</ ASP:BOUNDCOLUMN >
                            
< ASP:BOUNDCOLUMN  datafield ="类别名称"  headertext ="类别" >
                                
< HEADERSTYLE  width ="100px" ></ HEADERSTYLE >
                            
</ ASP:BOUNDCOLUMN >
                        
</ COLUMNS >
                    
</ ASP:DATAGRID >
                
</ ASP:PANEL ></ DIV >
            
< BR >
            
< BR >
            
< BR >
            
< ASP:HYPERLINK  id ="lnkReload"  runat ="server"  width ="80px"  navigateurl ="Pager.aspx"  enableviewstate ="False" > 重载 </ ASP:HYPERLINK >
        
</ FORM >
    
</ BODY >
</ HTML >
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值