知识大全 Asp.net中DataGrid控件的自定义分页

Posted

篇首语:宁愿跑起来被拌倒无数次 也不要规规矩矩走一辈子。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Asp.net中DataGrid控件的自定义分页相关的知识,希望对你有一定的参考价值。

Asp.net中DataGrid控件的自定义分页  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  使用DataGrid时自带的分页实现起来虽然比较方便 但是效率不高 每次都需要读取所有页(整个记录集) 而加载的只是其中一页 造成了资源的浪费 记录多又会使效率变得很低 下面通过DataGrid的自定义分页功能来减少资源使用和提高效率

  实现的关键是设置AllowCustomPaging属性位True 并把VirtualItemCount属性设置位总的记录数 给分页提供依据 前台的主要代码如下

  <form id= Form method= post runat= server >

  <TABLE id= Table urn:schemas microsoft :office:smarttags /> :chmetcnv TCSC= NumberType= Negative= False HasSpace= False SourceValue= UnitName= pt w:st= on > pt :chmetcnv> cellSpacing= cellPadding= width= align= center

  border= >

  <TR>

  <TD>

  <asp:datagrid id= DataGrid runat= server Width= % AllowPaging= True AllowCustomPaging= True >

  <PagerStyle Font Size= :chmetcnv TCSC= NumberType= Negative= False HasSpace= False SourceValue= UnitName= pt w:st= on > pt :chmetcnv> Mode= NumericPages ></PagerStyle>

  </asp:datagrid></TD>

  </TR>

  </TABLE>

  </form>

  这里使用的数据源还是假设为Northwind的Customers表

  下面是访问单页的存储过程 实现方式很多 不过这个是最普通的

  CREATE PROCEDURE [GetCustomersDataPage]

  @PageIndex INT

  @PageSize  INT

  @RecordCount INT OUT

  @PageCount INT OUT

  AS

  SELECT @RecordCount = COUNT(*)  FROM   Customers

  SET @PageCount = CEILING(@RecordCount * / @PageSize)

  DECLARE @SQLSTR NVARCHAR( )

  IF @PageIndex = OR @PageCount <=

  SET @SQLSTR =N SELECT TOP +STR( @PageSize )+

     CustomerID CompanyName Address Phone  FROM   Customers ORDER BY CustomerID DESC

  ELSE IF     @PageIndex = @PageCount

  SET @SQLSTR =N SELECT * FROM ( SELECT TOP +STR( @RecordCount @PageSize * @PageIndex )+

     CustomerID CompanyName Address Phone  FROM   Customers ORDER BY CustomerID ASC ) TempTable  ORDER BY CustomerID DESC

  ELSE

  SET @SQLSTR =N SELECT TOP  +STR( @PageSize )+ * FROM ( SELECT TOP +STR( @RecordCount @PageSize * @PageIndex )+

     CustomerID CompanyName Address Phone  FROM   Customers ORDER BY CustomerID ASC ) TempTable ORDER BY CustomerID DESC

  EXEC (@SQLSTR)

  GO

  获取记录数和页数都采用存储过程的输出参数

  获取数据源 这里返回一个DataSet

  先定义了连个数据成员

  private int pageCount;//页数

  private int recordCount;//记录数

  //获取单页数据

  private static DataSet GetCustomersData(int pageIndex int pageSize ref int recordCount ref int pageCount)

  

  string connString = ConfigurationSettings AppSettings[ ConnString ];

  SqlConnection conn = new SqlConnection(connString);

  SqlCommand m = new SqlCommand( GetCustomersDataPage conn);

  m Parameters Add(new SqlParameter( @PageIndex SqlDbType Int));

  m Parameters[ ] Value = pageIndex;

  m Parameters Add(new SqlParameter( @PageSize SqlDbType Int));

  m Parameters[ ] Value = pageSize;

  m Parameters Add(new SqlParameter( @RecordCount SqlDbType Int));

  m Parameters[ ] Direction = ParameterDirection Output;

  m Parameters Add(new SqlParameter( @PageCount SqlDbType Int));

  m Parameters[ ] Direction = ParameterDirection Output;

  m CommandType = CommandType StoredProcedure;

  SqlDataAdapter dataAdapter = new SqlDataAdapter(m);

  DataSet ds = new DataSet();

  dataAdapter Fill(ds);

  recordCount = (int)m Parameters[ ] Value;

  pageCount = (int)m Parameters[ ] Value;

  return ds;

  

  //绑定数据到DataGrid 同时刷新数据总记录数

  private void DataGridDataBind()

  

  DataSet ds = GetCustomersData(PageIndex PageSize ref recordCount ref pageCount);

  this DataGrid VirtualItemCount = RecordCount;

  this DataGrid DataSource = ds;

  this DataGrid DataBind();

  

  下面是分页的几个变量属性

  public int PageCount

  

  getreturn this DataGrid PageCount;

  

  public int PageSize

  

  getreturn this DataGrid PageSize;

  

  public int PageIndex

  

  getreturn this DataGrid CurrentPageIndex;

  setthis DataGrid CurrentPageIndex = value;

  

  public int RecordCount

  

  getreturn recordCount;

  

  注册DataGrid分页事件

  //分页事件处理

  private void DataGrid _PageIndexChanged(object source System Web UI WebControls DataGridPageChangedEventArgs e)

  

  DataGrid dg = (DataGrid)source;

  dg CurrentPageIndex = e NewPageIndex;

  DataGridDataBind();

  

  最好判断当前页面是否是第一次加载 防止重复加载两次数据

  private void Page_Load(object sender System EventArgs e)

  

  if(!Page IsPostBack)

  

  DataGridDataBind();

  

  

  显示界面如下

   src= //img educity cn/img_ / / / gif width= border= >

cha138/Article/program/net/201311/11473

相关参考

知识大全 ASP.NET中自定义DataGrid分页设置的实现

ASP.NET中自定义DataGrid分页设置的实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 Asp.NET自定义DataGrid控件

Asp.NET自定义DataGrid控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一&nb

知识大全 基于ASP.NET的自定义分页显示[1]

基于ASP.NET的自定义分页显示[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  引言  

知识大全 基于ASP.NET的自定义分页显示[3]

基于ASP.NET的自定义分页显示[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 基于ASP.NET的自定义分页显示[4]

基于ASP.NET的自定义分页显示[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 基于ASP.NET的自定义分页显示[2]

基于ASP.NET的自定义分页显示[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 使用ASP.Net中的自定义控件

使用ASP.Net中的自定义控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  if((data

知识大全 使用ASP.Net中的自定义控件[4]

使用ASP.Net中的自定义控件[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &

知识大全 使用ASP.Net中的自定义控件[5]

使用ASP.Net中的自定义控件[5]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &

知识大全 使用ASP.Net中的自定义控件[2]

使用ASP.Net中的自定义控件[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &