xiyurui

路靠自己走,也靠运气. 但能不能抓住运气靠自己的手. 所以.自己的手和自己的脚,是最值得依赖的. 少壮不努力,老大徒伤悲!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

datagrid 真实的分页,欢迎大家提意见

Posted on 2006-02-14 12:27  晰雨的天空  阅读(186)  评论(0)    收藏  举报

private void Page_Load(object sender, System.EventArgs e)
  {
   if(!Page.IsPostBack)
   {
    DataGrid1.VirtualItemCount = getcount();
       DataGrid1.DataSource = ListProduct(1,DataGrid1.PageSize);
    DataGrid1.DataBind();
   }
  }

  private int getcount()
  {

   return   Convert.ToInt32(DataAccess.ExecuteScalar("select count(*) from Orders"));
  }

  private DataTable ListProduct(int pageIndex, int pageSize)
  {

   SqlParameter[]  sp = new SqlParameter[3];

   SqlParameter spr=new SqlParameter("@QueryStr",SqlDbType.VarChar,500);
   spr.Direction=ParameterDirection.Input;
   spr.Value ="select top 100 percent * from orders order by OrderID";
            sp[0] = spr;

   SqlParameter spr1=new SqlParameter("@PageSize",SqlDbType.Int,4);
   spr1.Direction=ParameterDirection.Input;
   spr1.Value =DataGrid1.PageSize;
             sp[1] = spr1;

   SqlParameter spr2=new SqlParameter("@PageCurrent",SqlDbType.Int,4);
   spr2.Direction=ParameterDirection.Input;
   spr2.Value =pageIndex;
            sp[2] = spr2;

   DataSet ds = new DataSet();
   
          

 


    DataAccess.ExecutePorcedure("page_show",sp,ref ds);
   return ds.Tables[0];
  }

 

  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid1_PageIndexChanged);
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion

  private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
  {
   DataGrid1.DataSource = ListProduct(e.NewPageIndex+1, DataGrid1.PageSize); // 从数据库中读取新的数据
  
        DataGrid1.DataBind();
          DataGrid1.CurrentPageIndex =e.NewPageIndex;

  }
 }


  protected System.Web.UI.WebControls.DataGrid DataGrid1;
  
  DataGrid1.AllowPaging = true;
  
  DataGrid1.AllowCustomPaging = true;
  
  然后在设置要显示的一页的大小
  
  DataGrid1.PageSize = 100; // 在显示的时候依据实际的数据显示。
  
  设置一页大小后,如果要让DataGrid实际分出页数来,还必须设置
  
  DataGrid1.VirtualItemCount = GetProductCount() ; // GetProductCount() 的功能是获取满足条件的产品数目, 这里的条件就是productid<200000. 设置这项属性后,那么这个DataGrid的页数就是
  
  VirtualItemCount/PageSize, 也就是PageCount的值. 不能对PageCount直接赋值,因为他是只读的属性.
  
  这些属性设置好后再绑定数据:

存储过程用的是邹建大哥的..呵呵,,注意sql语句的写法要写top