public int Record_Per_Page;  //定义每页显示记录数
    int nPageCount;   //定义总页数
    int nRecCount;   //定义总记录数
    int nPage;      //定义当前页
   //获得总记录数
        nRecCount = pd.GetObjectCountByTime(timeStart, timeEnd);
        StringBuilder strHtml = new StringBuilder("");        //取得当前页数,并判断
        if (Request["pagesize"] == null)
            Record_Per_Page = 25;
        else
            Record_Per_Page = Convert.ToInt32(Request["pagesize"]);        //判断是否存在数据记录
        if (nRecCount > 0)
        {
            //确定数据记录要显示的页面数
            nPageCount = nRecCount / Record_Per_Page;
            if (nRecCount % Record_Per_Page > 0)
                nPageCount++;
            if (nPage < 1)
                nPage = 1;
            if (nPage > nPageCount)
                nPage = nPageCount;            //将页面显示到屏幕上,并作连接
            for (int i = 1; i < nPageCount; i++)
            {
                strHtml.Append("<a href='Dengji.aspx?page=" + i + "&timestart=" + timeStart.ToString("yyyy-MM-dd") + "&timeend=" + timeEnd.ToString("yyyy-MM-dd") + " '>");
                //strHtml.Append("<a href='Dengji.aspx?page=" + i + "'>");
                if (i == nPage) strHtml.Append("<b>" + i + "</b>");
                else strHtml.Append(i);
                strHtml.Append("</a>&nbsp"); 
            }
            //确认当前页面的开始记录和终止记录
            int nStart = Record_Per_Page * (nPage - 1);
            int nEnd = nStart + Record_Per_Page - 1;
            if (nEnd > nRecCount - 1)
                nEnd = nRecCount - 1;            strlnk = strHtml.ToString();           StrSql.AppendFormat("SELECT distinct TOP {0}  * FROM C_Work_Object WHERE  ", Record_Per_Page.ToString());
        StrSql.AppendFormat("( Obj_id NOT IN (SELECT TOP {0} Obj_id  FROM C_Work_Object", (Record_Per_Page * (nPage - 1)).ToString());        
        StrSql.Append(" ORDER BY Obj_id DESC)");
        strSql.Append(" ORDER BY Obj_id DESC");
        pdperson = pd.GetObjectBySql(StrSql.ToString() +strSql.ToString() );
这是我写的一个手工分页代码,设置的每页显示的记录数是25条,但现在的问题是当页面计算出来多余的记录数大于或少于25条时,都不显示,哪位大狭帮指点一下啊,怎么改正啊???多谢~~

解决方案 »

  1.   

    StrSql.AppendFormat("SELECT distinct TOP {0}  * FROM C_Work_Object WHERE  ", Record_Per_Page.ToString()); 
            StrSql.AppendFormat("( Obj_id NOT IN (SELECT TOP {0} Obj_id  FROM C_Work_Object", (Record_Per_Page * (nPage - 1)).ToString());        
            StrSql.Append(" ORDER BY Obj_id DESC)"); 
            strSql.Append(" ORDER BY Obj_id DESC"); 
            pdperson = pd.GetObjectBySql(StrSql.ToString()); //你上面打了两个StrSql.Append("ORDER BY Obj_id DESC"); 与 strSql.Append(" ORDER BY Obj_id DESC"); 
    重复了吧,你加一个断点看看你的Sql语句,拿到查询分析器里面,肯定报错了,注:
    select top @PageSize * from TableName where [PK] not in(select top @RecordStart [pk] from jobs ) order by pk asc/desc。
    @PageSize是每一页显示的条数。
    TableName是要求分页的表或者视图,PK是一个唯一字段。
    @RecordStart 是记录开始的位置.根据每一页多少条,与第几页,算出来的.具体算法一般为:@RecordStart=PageSize*(PageNums-1)。
      

  2.   

      PDPerson pd = new PDPerson();        //获得总记录数
            nRecCount = pd.GetObjectCountByTime(timeStart, timeEnd);
            StringBuilder strHtml = new StringBuilder("");        //取得当前页数,并判断
            if (Request["pagesize"] == null)
                Record_Per_Page = 25;
            else
                Record_Per_Page = Convert.ToInt32(Request["pagesize"]);        //判断是否存在数据记录
            if (nRecCount > 0)
            {
                //确定数据记录要显示的页面数
                nPageCount = nRecCount / Record_Per_Page;
                if (nRecCount % Record_Per_Page > 0)
                    nPageCount++;
                if (nPage < 1)
                    nPage = 1;
                if (nPage > nPageCount)
                    nPage = nPageCount;            //将页面显示到屏幕上,并作连接
                for (int i = 1; i < nPageCount; i++)
                {
                    strHtml.Append("<a href='Dengji.aspx?page=" + i + "&timestart=" + timeStart.ToString("yyyy-MM-dd") + "&timeend=" + timeEnd.ToString("yyyy-MM-dd") + " '>");
                    //strHtml.Append("<a href='Dengji.aspx?page=" + i + "'>");
                    if (i == nPage) strHtml.Append("<b>" + i + "</b>");
                    else strHtml.Append(i);
                    strHtml.Append("</a>&nbsp");
                  
                }            //确认当前页面的开始记录和终止记录
                int nStart = Record_Per_Page * (nPage - 1);
                int nEnd = nStart + Record_Per_Page - 1;
                if (nEnd > nRecCount - 1)
                    nEnd = nRecCount - 1;            strlnk = strHtml.ToString();        StringBuilder StrSql = new StringBuilder();
            StringBuilder strSql = new StringBuilder();
            StrSql.AppendFormat("SELECT distinct TOP {0}  * FROM C_Work_Object WHERE  ", Record_Per_Page.ToString());
            StrSql.AppendFormat("( Obj_id NOT IN (SELECT TOP {0} Obj_id  FROM C_Work_Object", (Record_Per_Page * (nPage - 1)).ToString());        if (timeStart != DateTime.MinValue || timeEnd != DateTime.MinValue)
            {
                StrSql.Append(" where ");
                if (timeStart == DateTime.MinValue)
                {
                    StrSql.AppendFormat(" Obj_dotime < '{0}'", timeEnd.ToString());
                    strSql.AppendFormat(" Obj_dotime < '{0}')", timeEnd.ToString());
                }
                else if (timeEnd == DateTime.MinValue)  
                {
                    StrSql.AppendFormat(" Obj_dotime > '{0}'", timeStart.ToString());
                    strSql.AppendFormat(" Obj_dotime > '{0}')", timeStart.ToString());
                }
                else
                {
                    StrSql.AppendFormat(" Obj_dotime between '{0}'  and '{1}'", timeStart.ToString(), timeEnd.ToString());
                    strSql.AppendFormat(" Obj_dotime between '{0}'  and '{1}')", timeStart.ToString(), timeEnd.ToString());
                }
               
            }
            StrSql.Append(" ORDER BY Obj_id DESC)");
            StrSql.Append(" and ");
            strSql.Append(" ORDER BY Obj_id DESC");
            pdperson = pd.GetObjectBySql(StrSql.ToString() +strSql.ToString() );
    楼上的掌柜,加入断点没有报错,我的问题是:计算页面数不可能刚好是整数啊,但多余的记录数,我的就显示不出来了,帮忙指点一下啊>>>??
      

  3.   

    //将页面显示到屏幕上,并作连接 
                for (int i = 1; i < nPageCount; i++) 
                { 
                    strHtml.Append(" <a href='Dengji.aspx?page=" + i + "&timestart=" + timeStart.ToString("yyyy-MM-dd") + "&timeend=" + timeEnd.ToString("yyyy-MM-dd") + " '>"); 
                    //strHtml.Append(" <a href='Dengji.aspx?page=" + i + "'>"); 
                    if (i == nPage) strHtml.Append(" <b>" + i + " </b>"); 
                    else strHtml.Append(i); 
                    strHtml.Append(" </a>&nbsp"); 
                } 
    ============================================================================在上面的 for 循环条件里,应该是for (int i = 1; i <= nPageCount; i++) 注意其中的终止 i <= nPageCount
      

  4.   

    晕 又不是没分页干吗自己写?            PagedDataSource ps = new PagedDataSource();
                ps.AllowPaging = true;
                ps.PageSize = 2;
                ps.CurrentPageIndex = pg - 1;
                ps.DataSource = *****;             //***** bind            
                if (!ps.IsFirstPage)
                {                HyperLink1.NavigateUrl = "?" + (pg - 1);
                }
                if (!ps.IsLastPage)
                {
                    HyperLink2.NavigateUrl = "?" + (pg + 1);
                }