DataList分页的一般方法

 看了网上一些关于DataList分页的列子,有很多分页方法,主要有利用PageDataSource类,存储过程分页,还有就是利用DataSet进行分页,其实是利用SqlDataAdapter的Fill方法,下面我就用DataSet 就行分页与大家分享(其实也是网上看来的,然后加上自己的理解,多了一点点功能,呵呵)

.cs文件如下:

 

public static string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["gomayConnectionString"].ConnectionString;
    
int pageSize, pageCount, recordCount, currentPage;
    
protected void Page_Load(object sender, EventArgs e)
    
{
        pageSize 
= 10;
        
if (!IsPostBack)
        
{
            ListBind();
//绑定DataList
            currentPage = 0;//首页索引为0
            ViewState["pageIndex"= 0;//保存页索引
            
//总记录数
            recordCount = CalculateRecord();
            lblRecordCount.Text 
="总记录数:"+ recordCount.ToString();
            
//总页数
            pageCount = recordCount / pageSize;//取整
            if (recordCount % pageSize > 0//总记录数不是 页大小的 整数倍
            {
                pageCount 
= pageCount + 1;
            }

            ViewState[
"pageCount"= pageCount; //保存页数
            lblPageCount.Text = "页数:" + pageCount.ToString();
            Label2.Text 
= (currentPage + 1+ "/" + pageCount.ToString();


        }

        btnGo.Attributes.Add(
"onclick"" return validate()");
    }

    
//计算记录总数
    public int  CalculateRecord() 
    
{

        
int intCount;
        
string strCount = "select count(*) as co from quote";
        SqlConnection con 
= new SqlConnection(connectionString);
        SqlCommand cmd 
= new SqlCommand(strCount, con);
        con.Open();
        SqlDataReader dr 
= cmd.ExecuteReader();
        
if (dr.Read())
        
{
            intCount 
= int.Parse(dr["co"].ToString());
        }

        
else
        
{
            intCount 
= 0;

        }

        dr.Close();
        
return intCount;
        con.Close();


    }

    
//创建数据源
    ICollection CreateSource()
    
{
        SqlConnection con
=new SqlConnection(connectionString);
        
int startIndex;
        startIndex 
= currentPage * pageSize; //某页的第一条记录索引
        string strSel = "select * from quote";
        DataSet ds 
= new DataSet();
        SqlDataAdapter da
=new SqlDataAdapter(strSel,con);
        
        da.Fill(ds, startIndex, pageSize, 
"quote");//取一张页面的记录数
        return ds.Tables["quote"].DefaultView;
    }

    
public void ListBind()
    
{

        DataList1.DataSource 
= CreateSource();
        DataList1.DataBind();
        lbnNextPage.Enabled 
= true;
        lbnPrevPage.Enabled 
= true;
        
if (currentPage == pageCount - 1)
        
{
            lbnNextPage.Enabled 
= false;
        }

        
if (currentPage == 0)
        
{
            lbnPrevPage.Enabled 
= false;
        }


    }

    
//上一页 下一页
    protected void Page_OnClick(object sender, CommandEventArgs e)
    
{
        currentPage 
= (int)ViewState["pageIndex"];
        pageCount 
= (int)ViewState["pageCount"];
        
string cmd = e.CommandName;
        
switch (cmd)
        

            
case "Next":
                
if (currentPage < pageCount - 1) currentPage++;
                
//Label2.Text = (currentPage+1) + "/" + pageCount.ToString();
                break;
            
case "Prev":
                
if (currentPage > 0) currentPage--;
                
//Label2.Text = (currentPage+1) + "/" + pageCount.ToString();
                break;
            
case "First":
                currentPage 
= 0;
                
break;
            
case"Last":
                currentPage 
= pageCount - 1;
                
break;


        }

        Label2.Text 
= (currentPage + 1+ "/" + pageCount.ToString();

        ViewState[
"pageIndex"= currentPage;
        ListBind();

    }

    
//跳转页
    protected void btnGo_Click(object sender, EventArgs e)
    
{
        
int intPage=Convert.ToInt32(txtPage.Text);
        
//currentPage = intPage-1;
        pageCount = (int)ViewState["pageCount"];
        
if (intPage > pageCount) //如果输入的页数大于总页数
        {
            currentPage 
= pageCount - 1;
        }

        
else if (intPage <=0)
        
{
            currentPage 
= 0;
        }

        
else
        
{
            currentPage 
= intPage - 1;
        }


        Label2.Text 
= (currentPage + 1+ "/" + pageCount.ToString();
      
        ListBind();
        
    }

aspx 文件如下:

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DataList.aspx.cs" Inherits="test_DataList" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>021DataList</title>

</HEAD>
<body>
<script type="text/javascript">
function validate()
{
    
if (document.getElementById("txtPage").value=="")
        
{
            alert(
'不能为空!');
            document.getElementById(
"txtPage").focus();
            
return false;
         }

    
         
        var digits
="0123456789";
        var temp;
        
for(i=0;document.getElementById("txtPage").value.length;i++)
            
{
                temp
=document.getElementById("txtPage").value.substring(i,i+1);
                
if (digits.indexOf(temp)==-1)
                    
{
                    alert(
"只能输入数字!");
                    document.getElementById(
"txtPage").focus();
                    
return false;
            
                    }

                     
return true;
            }

           
      
    
return true;
}



   

</script>
<form id="Form1" method="post" runat="server">
<FONT face="宋体">
    
<asp:DataList ID="DataList1" runat="server">
        
<ItemTemplate>
            
<asp:Label ID="Label1" runat="server" Text='<%# Eval("printname") %>'></asp:Label>
        
</ItemTemplate>
    
</asp:DataList>
    
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label></FONT><asp:LinkButton ID="lbnPrevPage" runat="server" CommandName="Prev" OnCommand="Page_OnClick">上一页</asp:LinkButton>
    
<asp:LinkButton ID="lbnNextPage" runat="server" CommandName="Next" OnCommand="Page_OnClick">下一页</asp:LinkButton>
    
<asp:Label ID="lblRecordCount" runat="server" Text="Label"></asp:Label>
    
<asp:Label ID="lblPageCount" runat="server" Text="Label"></asp:Label>
    
<asp:LinkButton ID="lbnFirstPage" runat="server" CommandName="First" OnCommand="Page_OnClick">首页</asp:LinkButton>
    
<asp:LinkButton ID="lbnLastPage" runat="server" CommandName="Last" OnCommand="Page_OnClick" Width="33px">末页</asp:LinkButton>
    跳转到
<asp:TextBox ID="txtPage" runat="server" Width="30px"></asp:TextBox>
    
<asp:Button ID="btnGo" runat="server" Text="Go" OnClick="btnGo_Click"   />
</form>
</body>
</HTML>

 

 

 

发布了12 篇原创文章 · 获赞 3 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章