zoukankan      html  css  js  c++  java
  • DataGrid分页使用小结

    默认分页模式:
    选中“允许分页”;页大小;页导航设置,可以是上下方式,也可以用页码方式
    格式里可以设置“页导航”按钮的对起方式;
     
     private void datashow()//绑定数据
      {
       string sql="server=127.0.0.1;database=ltp;user id=sa;password=";
       SqlConnection mycon=new SqlConnection(sql);
     
       string selsql="select * from data";
       SqlDataAdapter da=new SqlDataAdapter(selsql,mycon);
     
       DataSet ds=new DataSet();
       da.Fill(ds,"data");
     
       this.DataGrid1.DataSource=ds.Tables["data"];
       this.DataGrid1.DataBind();
       
      }

    响应事件 PageIndexChanged()
     
        this.DataGrid1.CurrentPageIndex=e.NewPageIndex;
        datashow();
       
     
     
     
    自定义导航控件的默认分页模式
       当前页:this.Label1.Text=(this.DataGrid1.CurrentPageIndex+1).ToString();
               因为CurrentPageIndex从0开始的,所以要+1

       总页数:this.Label2.Text=this.DataGrid1.PageCount.ToString();
      
    //第一页
    this.DataGrid1.CurrentPageIndex=0;
    //上一页
    if(this.DataGrid1.CurrentPageIndex>0)
       {
        this.DataGrid1.CurrentPageIndex-=1;
        this.datashow();
       }
    //下一页
       if(this.DataGrid1.CurrentPageIndex<(this.DataGrid1.PageCount-1))
       {
        this.DataGrid1.CurrentPageIndex+=1;
        this.datashow();
       }
    //最后一页
    this.DataGrid1.CurrentPageIndex=this.DataGrid1.PageCount-1
     
     
    最后再 datashow();
     
     
    自定义数据分页--非常重要!(提高性能效率)
       每次this.datashow();是提取全部数据,反而降低了效率。
     
    正确的方法:
    1,选中“允许分页”;“允许自定义分页”;页大小。
    2,添加导航按钮,设置CommandName属性,previous,next
    3,代码:
     
      //记录每一页的开始索引
      int startindex;
     
      private void Page_Load(object sender, System.EventArgs e)
      {
       //自定义按钮事件
       this.btnprevious.Click+=new System.EventHandler(this.NavigateToPage);
       this.btnnext.Click+=new System.EventHandler(this.NavigateToPage);
     
        //or   OnCommand="NavigateToPage"

       if(!IsPostBack)
       {
        startindex=0;
     
        //得到数据源的记录数,并指派给DataGrid1
     
        string constr="server=127.0.0.1;database=ltp;user id=sa;password=";
        SqlConnection mycon=new SqlConnection(constr);
        mycon.Open();
     
        string sql="select 总数=count(*) from data";
        SqlCommand com=new SqlCommand(sql,mycon);
     
        SqlDataReader dr=com.ExecuteReader(CommandBehavior.SingleRow);
        if(dr.Read())
         this.DataGrid1.VirtualItemCount=(int)dr["总数"];
        dr.Close();
        mycon.Close();
        
        //
        this.bindGrid(startindex,"previous");
     
     
     
       }
      }
     

      //自定义按钮事件
      private  void NavigateToPage(object sender,System.EventArgs e)
      {
       string pageinfo=((Button)sender).CommandName;
       switch(pageinfo)
       {
        case "previous":
         if(this.DataGrid1.CurrentPageIndex>0)
         {
          this.DataGrid1.CurrentPageIndex-=1;
          
         }
         break;
     
        case "next":
         if(this.DataGrid1.CurrentPageIndex<(this.DataGrid1.PageCount-1))
         {
          this.DataGrid1.CurrentPageIndex+=1;
          
         }
         break;
     
       }
     
       //得到开始的索引
       startindex=this.DataGrid1.CurrentPageIndex*this.DataGrid1.PageSize;
       //重新绑定
       this.bindGrid(startindex,pageinfo);
     

      }
     
      //从数据源提取所需的数据记录--方法2(有int序号的表)
      private void bindGrid2(int startindex,string pageinfo)
      {
       string constr="server=127.0.0.1;database=ltp;user id=sa;password=";
       SqlConnection mycon=new SqlConnection(constr);
       mycon.Open();
     
       string sql="select top 5 * from data where 序号>="+startindex+" order by 序号";
       SqlDataAdapter da=new SqlDataAdapter(sql,mycon);
     
       DataSet ds=new DataSet();
       da.Fill(ds,"data");
       this.DataGrid1.DataSource=ds.Tables["data"];
       this.DataGrid1.DataBind();
       
       mycon.Close();
     

      }
     

      //从数据源提取所需的数据记录--方法1(按某字符串列排序的)
      private void bindGrid(int startindex,string pageinfo)
      {
       string constr="server=127.0.0.1;database=ltp;user id=sa;password=";
       SqlConnection mycon=new SqlConnection(constr);
       mycon.Open();
     
       SqlCommand com=new SqlCommand();
     
       switch(pageinfo)
       {
        case "previous":
         string sql="select top 5 * from data where 持股名称>=@id order by 持股名称";
         com=new SqlCommand(sql,mycon);
     
        // com=new SqlCommand("select top 5 * from data where 持股名称>=@id order by 持股名称",mycon);
         
         if(startindex==0)
         {
          com.Parameters.Add("@id",SqlDbType.NVarChar,10).Value="";
         }
         else
         {
          //把开始
          com.Parameters.Add("@id",SqlDbType.NVarChar,10).Value=ViewState[(this.DataGrid1.CurrentPageIndex+1).ToString()];
         // com.Parameters.Add("@id",SqlDbType.NVarChar,10).Value=this.DataGrid1.Items[0].Cells[1].Text;
         }
         break;
     
        case "next":
         string sql2="select top 5 * from data where 持股名称>@id order by 持股名称";
         com=new SqlCommand(sql2,mycon);
         
         //把最后一行的列值赋给下一页开始
         com.Parameters.Add("@id",SqlDbType.NVarChar,10).Value=this.DataGrid1.Items[4].Cells[1].Text;
         break;
       }
     
       SqlDataReader dr=com.ExecuteReader();
       this.DataGrid1.DataSource=dr;
       this.DataGrid1.DataBind();
       dr.Close();
       mycon.Close();
     
       //重新得到当前开始第一行的列值
       ViewState[(this.DataGrid1.CurrentPageIndex+1).ToString()]=this.DataGrid1.Items[0].Cells[1].Text;
               
     
      }
  • 相关阅读:
    mac c++编译出现segmentation fault :11错误
    ssh 连接缓慢解决方法
    237. Delete Node in a Linked List
    203. Remove Linked List Elements
    Inversion of Control Containers and the Dependency Injection pattern
    82. Remove Duplicates from Sorted List II
    83. Remove Duplicates from Sorted List
    SxsTrace
    使用CCleaner卸载chrome
    decimal and double ToString problem
  • 原文地址:https://www.cnblogs.com/ltp/p/289622.html
Copyright © 2011-2022 走看看