关于msdn上面的《Web 窗体页创建分页的数据访问》的改进

   前段时间做了第一个ASP.NET项目,很简单的。在DataGrid分页的时候遇到小问题,就参考msdn的例子做了一个。实际过程中发现似乎有点问题,改进了一下:

   链接:ms-help://MS.MSDNQTR.2003FEB.2052/vbcon/html/vbwlkwalkthroughdisplayingdatainlistboxesonwebformspage.htm

   说明:该文章使用了两个sql语句,目的是向前翻页的时候和向后翻页的时候分别使用不同的语句。改进以后只用一条语句就可以。我在项目里面使用的是存储过程:
   CREATE PROCEDURE selectAllUser
   (
      @Id int
   )
    AS
   select top 15 Id,UserName,IDcard,Sex,Birthday,MailAddr,GetscholarTime
   from UserInfo
   where  Id>=@Id
   GO

   关键代码如下:
   ///
   /// 从数据库读取从userID开始的15条记录并显示
   ///
   ///
  private void showAllUser(int userID)
  {
      ManageDB managedb = new ManageDB();
      int count = managedb.getUserCount();   //这个方法获取总记录数
      if(count == -1)
   {
       Response.Redirect("error.aspx",true);
       return;
   }
      count = count/this.gridUser.PageSize;
      SqlDataReader reader = managedb.getAllUser(userID);
      this.gridUser.DataSource = reader;
      this.gridUser.DataBind();
      reader.Close();
      ViewState["CurrentPage"] = CurrentPage;
      ViewState[CurrentPage.ToString()] = this.gridUser.Items[0].Cells[0].Text;
      if(CurrentPage <=0)
      {
          this.btnPrevious.Enabled = false;
      }
      if(CurrentPage >= count)
      {
          this.btnNext.Enabled = false;
      }
  }

   下一页按钮点击事件:
   private void btnNext_Click(object sender, System.EventArgs e)
  {
      this.btnPrevious.Enabled = true;
      CurrentPage = (int)(ViewState["CurrentPage"]);
      CurrentPage ++;
      //下面的代码有个+1操作,这个是必须的,这样保证了取得的记录没有重复的。
      int lastID = Convert.ToInt32(this.gridUser.Items[this.gridUser.PageSize-1].Cells[0].Text) + 1;
      this.showAllUser(lastID);
    }

   上一页按钮点击事件
   private void btnPrevious_Click(object sender, System.EventArgs e)
  {
      this.btnNext.Enabled = true;
      CurrentPage = Convert.ToInt32(ViewState["CurrentPage"]);
      CurrentPage--;
      if (CurrentPage >= 0) 
      {
          int firstid;
          firstid = Convert.ToInt32(ViewState[(CurrentPage).ToString()]);
          this.showAllUser(firstid);
      }
   }

   最后是page load事件里面添加:

   if(!Page.IsPostBack)
   {
       CurrentPage = 0;
       this.showAllUser(0);
   }

   这样就对一个简单的分页改进了一下。当然我们还可以显示出总页数,当前页数。但是这种分页功能不强,不能做到直接跳转到第几页。但是这个分页效率可以说是相当高的。

   整个源代码可以这里下载,注意数据库是sql server2000。
   另外我的Blog最近将推出.net书籍以及源代码下载,请关注!
 

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