默认分页模式: 选中“允许分页”;页大小;页导航设置,可以是上下方式,也可以用页码方式 格式里可以设置“页导航”按钮的对起方式;
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;
}
|