DataGrid分页使用小结
生活随笔
收集整理的這篇文章主要介紹了
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;
??????????? }
??{
???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;
??????????? }
轉載于:https://www.cnblogs.com/Dragon-China/archive/2007/02/28/659088.html
總結
以上是生活随笔為你收集整理的DataGrid分页使用小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不用代理实现弹出进度条窗体
- 下一篇: wpf学习笔记---初识xaml标签语言