类似淘宝网的那种商品浏览功能中,它的分页是怎么实现的,用GridView设置自动分页可以实现那种效果吗?

解决方案 »

  1.   

    按照你的简单意思 datalist 估计更好
      

  2.   

    default.aspx.cs:
    public partial class _Default : System.Web.UI.Page
    {
    string connectString = "";//定义自已的连接串
    protected void Page_Load(object sender, EventArgs e)
    {
    AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default));
    }
    [AjaxPro.AjaxMethod]
    public DataTable GetDataTable()
    {
    SqlDataAdapter ad = new SqlDataAdapter("select * from tableName", connectString);
    DataSet ds = new DataSet();
    ad.Fill(ds);
    int num = ds.Tables[0].Rows.Count;
    return ds.Tables[0];
    }
    }default.aspx:
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    <html>
    <head runat="server">
    <title>ASP.NET (C#) Ajax无刷新分页</title>
    <script language="javascript">
    var dtObj=new Object();
    function stringToInteger(inputString)
    {
    if(inputString == null || inputString == "")
    {
    return 0;
    }
    else
    {
    try
    {
    return parseInt(inputString);
    }
    catch(e)
    {
    return 0;
    }
    }
    }
    function numberToString(inputNumber)
    {
    return inputNumber.toString();
    }
    function getUrlParam(param)
    {
    var url=window.location.search.substring(1);        var paramArray=url.split("&");    for(var i=0;i<paramArray.length;i++)
    {var pramArraySub=paramArray[i].split("=");if(pramArraySub[0]==param && pramArraySub[1] != "undefined")
    return pramArraySub[1];
    }
    return "";
    }
    //
    var pageSize=5;
    //var pageNo=stringToInteger(getUrlParam("pageno"));
    </script>
    </head>
    <body>
    <form id="form1" runat="server">
    <div align=center><span id="sp_ShowContent"></span></div>
    </form>
    </body>
    </html>
    <script language=javascript>
    var pageNo =0;
    var dtObj = new Object();//对象实例化
    dtObj=_Default.GetDataTable().value;// 从后台得到数据
    var totalPage=0;
    var totalRecord = dtObj.Rows.length;
    if((dtObj.Rows.length%pageSize)==0)
    totalPage = dtObj.Rows.length/pageSize;
    else
    totalPage = Math.ceil(dtObj.Rows.length/pageSize);
    function showContent(op)
    {
    if(op == "first")
    {
    pageNo = 0;
    }
    else if(op == "previous")
    {
    if(pageNo>0)
    pageNo-=1;
    else
    pageNo=0;
    }
    else if(op == "next")
    {
    if(pageNo<totalPage-1)
    pageNo+=1;
    else
    pageNo = totalPage-1;
    }
    else if(op == "last")
    {
    pageNo=totalPage-1;
    }
    else
    {
    pageNo=0;
    }
    var content = "";
    var startRecord = pageNo*pageSize;
    var endRecord = 0;
    if(pageNo>=totalPage-1)
    endRecord = totalRecord;
    else
    endRecord = (pageNo+1)*pageSize;
    content = '<table width="75%" border="1" cellspacing="0" bordercolordark="#FFFFFF" bordercolorlight="#339900">';
    content += '<tr>';
    content += '<td width="45%">编号</td>';
    content += '<td width="55%">用户名</td>';
    content += '</tr>';
    for(var i=startRecord;i<endRecord;i++)
    {
    content += '<tr>';
    content += '<td width="45%">'+dtObj.Rows[i]["ID"]+'</td>';//ID,UserName is Column Name
    content += '<td width="55%">'+dtObj.Rows[i]["UserName"]+'</td>';
    content += '</tr>';
    }
    content += '<tr align="center">';
    content += '<td colspan="2"><a href="#" _fcksavedurl=""#"" _fcksavedurl=""#"" _fcksavedurl=""#"" _fcksavedurl=""#"" _fcksavedurl=""#"" onClick="showContent(\'first\')">第一页</a>&nbsp;<a href="#" onClick="showContent(\'previous\')">上一页</a>&nbsp;<a href="#" onClick="showContent(\'next\')">下一页</a>&nbsp;<a href="#" onClick="showContent(\'last\')">最后页</a></td>';
    content += '</tr>';
    content += '</table>';
    window.document.getElementById("sp_ShowContent").innerHTML=content;
    }
    showContent("first");
    </script> 
      

  3.   

    datalist没有自动分页吧,是不是得自定义?
      

  4.   

    本来不想回这贴的
    这段代码我贴N边了
    建议lZ先在CSDN搜索一下
    再发帖//ASP.NET2.0中datalist仿百度分页
    //注意此方法在ASP.NET1.0或1.1中测试通不过using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    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.Data.SqlClient;
    using System.IO;
    public partial class Sql : System.Web.UI.Page
    {
        SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["constrmy"]);
        int ToatalCountRecord;//总记录数
        int PageItem = 4;//每页显示的条数
        int CurrentPage = 1;//当前页数
        protected void Page_Load(object sender, EventArgs e)
        {
            
            if (!this.Page.IsPostBack)
            {
                if (Request.QueryString["page"] != null)
                {
                    if (!Int32.TryParse(Request.QueryString["page"].ToString(), out CurrentPage))
                    {
                        Response.Write("请输入分页参数!");
                        Response.End();
                        return;
                    }
                }
                
                this.BuidGrid();
            }
        }
        
        private void BuidGrid()
        {
            string s2 = "select * from ts1";
            SqlDataAdapter da = new SqlDataAdapter(s2, conn);
            DataSet ds = new DataSet();
            int startRecord = (CurrentPage - 1) * PageItem;
            da.Fill(ds, startRecord, PageItem, "a");
            this.DataList1.DataSource = ds.Tables["a"].DefaultView;
            this.DataList1.DataBind();
            SqlCommand comm = new SqlCommand("select count(*) from ts1", conn);
            conn.Open();
            ToatalCountRecord = Convert.ToInt32(comm.ExecuteScalar());
            conn.Close();
            BuildPages();
        }
        private void BuildPages()
        {
            int Step = 5;//偏移量
            int LeftNum = 0;//做界限
            int RightNum = 0;//右界限
            string PageUrl = Request.FilePath;
            int PageCount = (int)Math.Ceiling((double)(ToatalCountRecord) / PageItem);
            if (CurrentPage - Step < 1)
            {
                LeftNum = 1;
            }
            else
            {
                LeftNum = CurrentPage - Step;
            }
            if (CurrentPage + Step > PageCount)
            {
                RightNum = PageCount;
            }
            else
            {
                RightNum = CurrentPage + Step;
            }
            string OutPut = "";
            if (CurrentPage > 1)
            {
                OutPut += "<a href='" + PageUrl + "?page=" + (CurrentPage - 1) + "'>" + "上一页" + "</a>";
            }
            for (int i = LeftNum; i <= RightNum; i++)
            {
                if (i == CurrentPage)
                {
                    OutPut += "<font color=red>" + " " +"["+i.ToString() +"]"+ "" + "</font>";
                }
                else
                {
                    OutPut += "<a href='" + PageUrl + "?page=" + i.ToString() + "'>" + " " +"["+ i.ToString() +"]"+ " " + "</a>";
                }
            }
            if (CurrentPage < PageCount)
            {
                OutPut += "<a href='" + PageUrl + "?page=" + (CurrentPage + 1) + "'>" + "下一页" + "</a>";
            }
            this.PageInfo.InnerHtml = OutPut;
        }
      
    }
    //需要在前台添加一个  <div id="PageInfo" runat="server" >