[color=#0000FF]求救 分页写好了 但实现不了首页和尾页的功能  只能实现上下翻 [/color]这是存贮过程分页if exists(select * from sysobjects where name='proc_SelectBooksByPage2')
drop proc proc_SelectBooksByPage2
go
create proc proc_SelectBooksByPage2
@current int,
@size int,
@pageCount int output,
@count int output
as
declare @str nvarchar(200)
select @count=count(*) from books
select @pageCount=@count/@size
set @str='
SELECT TOP '+CAST(@size AS VARCHAR(20))+' *
FROM books WHERE (bookid  NOT IN (SELECT TOP '+cast((@size*@current) as VARCHAR(20))+' bookid FROM books ORDER BY bookid))
ORDER BY bookID'
下面是 后台代码
protected void Page_Load(object sender, EventArgs e)
        {
            this.lkPre.Click += new EventHandler(lkPre_Click);
            this.lkNext.Click += new EventHandler(lkNext_Click);
            if (!Page.IsPostBack)
            {
                DDBind(true, 0);
            }
        }               #region 变量和属性        int count;          //总记录数
        int currentPage;    //当前页数
        int size;       //每页显示记录数
        int pageCout;   //总页数
        #endregion        BookBLL bll = new BookBLL();        #region 自定义方法
        /// <summary>
        /// 数据绑定方法
        /// </summary>
        /// <param name="isFirst"></param>
        /// <param name="currentPage"></param>
        private void DDBind(bool isFirst, int currentPage)
        {            pageCout = 0;
            count = 0;
            size = 5;
            try
            {
                #region 分页
                List<Book> bookList = bll.SelectBooks(currentPage, size, out pageCout, out count);                ddlBooks.DataSource = bookList;
                ddlBooks.DataBind();                this.lblCurrent.Text = (currentPage + 1).ToString();
                this.lblPageCount.Text = pageCout.ToString();
                this.lblCount.Text = count.ToString();   //总记录数
                #endregion                #region viewState
                ViewState["CurrentPage"] = currentPage;
                ViewState["PageCout"] = pageCout - 1;
                ViewState["Count"] = count;                //调用翻页判断方法
                Paging();
                #endregion
            }
            catch (Exception ex)
            {
                Page.RegisterClientScriptBlock("msg", "<script>alert('查询出现错误!');</script>");
            }        }        /// <summary>
        /// 判断是否翻页的方法
        /// </summary>
        private void Paging()
        {
            //判断上下页的可用
            if (ViewState["CurrentPage"].ToString() == "0")
            {
                //如果是第一页,上一页不能用
                lkPre.Enabled = false;
            }
            else
            {
                lkPre.Enabled = true;
            }            if ((ViewState["CurrentPage"]).ToString() == ViewState["PageCout"].ToString())
            {
                //如果当前页是最后一页,下一页不能用
                lkNext.Enabled = false;
            }
            else
            {
                lkNext.Enabled = true;
            }
        }        /// <summary>
        /// 根据库存数量返回结果
        /// </summary>
        /// <param name="dr"></param>
        /// <returns></returns>
        public string GetStore(object  dr)
        {
            int num = int.Parse(DataBinder.Eval(dr,"Number").ToString());
            if (num > 0)
                return "有库存";
            else
                return "无库存";
        }
        #endregion        #region 事件
        /// <summary>
        /// 下一页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
         public void lkNext_Click(object sender, EventArgs e)
         {
            currentPage = int.Parse(ViewState["CurrentPage"].ToString()) + 1;
            DDBind(false, currentPage);
        }        /// <summary>
        /// 上一页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
         public void lkPre_Click(object sender, EventArgs e)
        {
            currentPage = int.Parse(ViewState["CurrentPage"].ToString()) - 1;
            DDBind(false, currentPage);
        }
        #endregion         protected void ddlBooks_DeleteCommand(object source, DataListCommandEventArgs e)
         {
             int row=e.Item.ItemIndex;
            HiddenField hf= ddlBooks.Items[row].FindControl("hfID") as HiddenField;
            int id = Convert.ToInt32(hf.Value);
         }         protected void lblFirst_Click(object sender, EventArgs e)
         {
             ViewState["PageCout"] = 1; //首页
         }         protected void lblLast_Click(object sender, EventArgs e)
         {
             ViewState["PageCout"] = pageCout;//尾页
         }
[color=#0000FF]求救 分页写好了 但实现不了首页和尾页的功能  只能实现上下翻 [/color]
        

解决方案 »

  1.   

    该怎么改 请教 这里  protected void lblFirst_Click(object sender, EventArgs e)
    {
    ViewState["PageCout"] = 1; //首页
    }protected void lblLast_Click(object sender, EventArgs e)
    {
    ViewState["PageCout"] = pageCout;//尾页
    }
      

  2.   

    PageCout 进来显示0 该怎么改啊  坐等高手来
      

  3.   

    首页和尾页应该是最好做的,应该是逻辑出问题了。谁还用这个方法哦。下载个aspnetpager.设置一下页大小,总记录数。就行了。翻页时在控件双击事件里改下pageIndex
      

  4.   

    建议使用aspnetpager相当省事下载地址
      

  5.   

    快不快 是SQL语句查询效率的问题,和AspNetPager本身没什么关系,它只是负责把数据Show出来而已。
      

  6.   

    晕!你少了句代码 
    public void lkPre_Click(object sender, EventArgs e)
    {
    currentPage = int.Parse(ViewState["CurrentPage"].ToString()) - 1;
    DDBind(false, currentPage);
    }
    protected void lblFirst_Click(object sender, EventArgs e)
    {
    ViewState["PageCout"] = 1; //首页
    }
    有什么不同啊?知道那出错了吧!要做分页要那么麻烦吗?
      

  7.   

    晕!你少了句代码 
    public void lkPre_Click(object sender, EventArgs e)
    {
    currentPage = int.Parse(ViewState["CurrentPage"].ToString()) - 1;
    DDBind(false, currentPage);
    }
    protected void lblFirst_Click(object sender, EventArgs e)
    {
    ViewState["PageCout"] = 1; //首页
    }
    有什么不同啊?知道那出错了吧!要做分页要那么麻烦吗?
      

  8.   

    修改为:{
    ViewState["PageCout"] = 0; //首页
    }protected void lblLast_Click(object sender, EventArgs e)
    {
    ViewState["PageCout"] = pageCout-1;//尾页
    }
      

  9.   

    DDBind(false, currentPage);吧这个加到 尾页和首页 还是不行 我都试试   还是不行
      

  10.   

    建议使用 PDF.NET框架,里面带无需编程既可以分页的控件。
    下载地址:http://blog.csdn.net/bluedoctor/archive/2010/01/24/5251913.aspx
      

  11.   


    protected void lblFirst_Click(object sender, EventArgs e)
    {
    ViewState["PageCout"] = 1; //首页DDBind(false, Convert.ToInt32(ViewState["PageCout"]));
    }
    要是你上下翻没问题话! 首页跟尾页我想是出在这个问题!
    起码你传了个值后数据会产生变化的(不考虑值是对错)!
      

  12.   

    按照你的思路 已经改好了 protected void lblFirst_Click(object sender, EventArgs e)
             {
                 ViewState["CurrentPage"] = 0; //首页
                 DDBind(false, Convert.ToInt32(ViewState["CurrentPage"]));         }         protected void lblLast_Click(object sender, EventArgs e)
             {
                 ViewState["CurrentPage"] = ViewState["PageCout"];//尾页
                 DDBind(false, Convert.ToInt32(ViewState["CurrentPage"]));
                        }谢谢 啊