DataGrid自定义分页控件

原创 2007年09月16日 19:53:00

      网上关于 DataGrid 自定义的分页控件很多,参照一些例子,做了一些优化,主要优点是使用方便,且控件中用ViewState保存了DataGrid需要绑定的数据,免去在绑定DataGrid时额外的处理,开发环境VS.NET2003。

      在调用页面引入分页控件命名控件后,定义protected PeterSun.Control.WebControl.Ascx.GridPager GridPager1,页面中调用的主要代码如下。

GridPager1.RelatedDataGridID = this.DataGrid1.ID;   //设置关联的DataGrid的ID属性,必须
GridPager1.RelatedDataSource = dt;   //设置数据源,必须
GridPager1.IsShowSummary = true;    //设置是否显示共有多少页,每页多少行信息
GridPager1.IsShowJumping = false;   //设置是否显示跳转到某页

       

      分页控件的详细代码,用ViewState保存了控件的属性信息,这里可以进一步扩展,如设置分页信息样式,显示哪些信息,等等。

    public class GridPager : System.Web.UI.UserControl
    
...{
        
protected System.Web.UI.WebControls.LinkButton LBtnFirst;
        
protected System.Web.UI.WebControls.LinkButton LBtnPrev;
        
protected System.Web.UI.WebControls.LinkButton LBtnNext;
        
protected System.Web.UI.WebControls.LinkButton LBtnLast;
        
protected System.Web.UI.WebControls.DropDownList ddlPagerNavigate;
        
protected System.Web.UI.WebControls.Label lblTip;  
        
protected System.Web.UI.WebControls.Label lblPagerInfo;   //分页描述信息,默认显示

        
private System.Web.UI.WebControls.DataGrid relatedDataGrid;  //要分页的DataGrid
        private DataTable relatedDataSource;  //绑定DataGrid的数据源
        private string relatedDataGridID; //DataGrid控件ID
        private bool isShowSummary = true;   //是否显示分页描述,默认显示
        private bool isShowJumping = true;   //是否显示跳转,默认显示

        
private void Page_Load(object sender, System.EventArgs e)
        
...{
            
// Put user code to initialize the page here
            if(Page.IsPostBack)
            
...{
                
this.PrepareParameters();
            }

        }


        
Web Form Designer generated code#region Web Form Designer generated code
        
override protected void OnInit(EventArgs e)
        
...{
            
//
            
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
            
//
            InitializeComponent();
            
base.OnInit(e);
        }

        
        
/**//// <summary>
        
///        Required method for Designer support - do not modify
        
///        the contents of this method with the code editor.
        
/// </summary>

        private void InitializeComponent()
        
...{
            
this.LBtnFirst.Click += new System.EventHandler(this.LBtnPager_Click);
            
this.LBtnPrev.Click += new System.EventHandler(this.LBtnPager_Click);
            
this.LBtnNext.Click += new System.EventHandler(this.LBtnPager_Click);
            
this.LBtnLast.Click += new System.EventHandler(this.LBtnPager_Click);
            
this.ddlPagerNavigate.SelectedIndexChanged += new System.EventHandler(this.ddlPagerNavigate_SelectedIndexChanged);
            
this.Load += new System.EventHandler(this.Page_Load);

        }

        
#endregion


        
分页控件公开属性#region 分页控件公开属性
        
/**//// <summary>
        
/// 与分页控件关联的DataGrid控件ID
        
/// </summary>

        public string RelatedDataGridID
        
...{
            
get
            
...
                
return relatedDataGridID;
            }

            
set
            
...{
                relatedDataGridID 
= value ;
                ViewState[
"DataGridID"= value;
                
//根据relatedDataGridID从父页面中获取需要关联的DataGrid控件
                this.relatedDataGrid = (DataGrid)this.Parent.FindControl(relatedDataGridID);
            }

        }


        
/**//// <summary>
        
/// 与DataGrid绑定的数据源
        
/// </summary>

        public DataTable RelatedDataSource
        
...{
            
get
            
...{
                
return relatedDataSource ;
            }

            
set
            
...{
                relatedDataSource 
= value ;
                relatedDataGrid.DataSource
=relatedDataSource;
                ViewState[
"DataSource"= relatedDataSource;
            }

        }


        
/**//// <summary>
        
/// 是否显示分页描述信息
        
/// </summary>

        public bool IsShowSummary
        
...{
            
get
            
...{
                
return isShowSummary ;
            }

            
set
            
...{
                isShowSummary 
= value ;
                ViewState[
"IsShowSummary"= isShowSummary;
            }

        }


        
/**//// <summary>
        
/// 是否显示跳转页面
        
/// </summary>

        public bool IsShowJumping
        
...{
            
get
            
...{
                
return isShowJumping ;
            }

            
set
            
...{
                isShowJumping 
= value ;
                ViewState[
"IsShowJumping"= isShowJumping;
            }

        }

         
#endregion


        
分页控件方法#region 分页控件方法
        
/**//// <summary>
        
/// 准备参数,DataGrid和DataTable
        
/// </summary>

        private void PrepareParameters()
        
...{
            
if(ViewState["DataGridID"!= null)
            
...{
                
this.relatedDataGridID = Convert.ToString(ViewState["DataGridID"]);
                
this.relatedDataGrid = (DataGrid)this.Parent.FindControl(this.relatedDataGridID);
            }
    
            
if(ViewState["DataSource"!= null)
            
...{
                
this.relatedDataSource = (DataTable)ViewState["DataSource"];
                
this.relatedDataGrid.DataSource = this.relatedDataSource;
            }

            
if(ViewState["IsShowSummary"!= null)
            
...{
                
this.isShowSummary = (bool)ViewState["IsShowSummary"];
            }

            
if(ViewState["IsShowJumping"!= null)
            
...{
                
this.isShowJumping = (bool)ViewState["IsShowJumping"];
            }

        }


        
/**//// <summary>
        
/// 生成跳转页列表
        
/// </summary>

        private void PopulatePageNavigate()
        
...{
            
this.ddlPagerNavigate.Items.Clear() ;
            
for(int i = 0 ;i <relatedDataGrid.PageCount ; i ++)
            
...{
                
this.ddlPagerNavigate.Items.Add("" + Convert.ToString(i+1+ "");
            }

            
this.ddlPagerNavigate.SelectedIndex =this.relatedDataGrid.CurrentPageIndex;
        }


        
/**//// <summary>
        
/// 执行DataGrid绑定,并更改控件的状态信息
        
/// </summary>

        public override void DataBind()
        
...{
            
try
            
...{
                
this.relatedDataGrid.DataBind() ;
            }

            
catch
            
...{
                
try
                
...{
                    
this.relatedDataGrid.CurrentPageIndex-= 1;
                }

                
catch
                
...{
                    
this.relatedDataGrid.CurrentPageIndex = 0;
                }

                
                
this.relatedDataGrid.DataBind() ;
            }

            
            
this.lblPagerInfo.Text = "" + Convert.ToString(relatedDataGrid.CurrentPageIndex+1+ "/" + Convert.ToString(relatedDataGrid.PageCount) + "页," + relatedDataGrid.PageSize + "条/页,共" + Convert.ToString(relatedDataSource.Rows.Count ) + "" ;

            
if(relatedDataGrid.CurrentPageIndex == 0)
            
...{
                
this.LBtnFirst.Enabled = false ;
                
this.LBtnPrev.Enabled  = false ;
            }

            
else
            
...{
                
this.LBtnFirst.Enabled = true ;
                
this.LBtnPrev.Enabled = true ;
            }


            
if(relatedDataGrid.CurrentPageIndex == (relatedDataGrid.PageCount -1))
            
...{
                
this.LBtnNext.Enabled = false ;
                
this.LBtnLast.Enabled = false ;
            }

            
else
            
...{
                
this.LBtnNext.Enabled = true ;
                
this.LBtnLast.Enabled = true ;
            }


            
//控制是否隐藏部分控件
            this.lblPagerInfo.Visible = this.isShowSummary;
            
this.lblTip.Visible = this.isShowJumping;
            
this.ddlPagerNavigate.Visible = this.isShowJumping;


            
//绑定页码下拉列表
            this.PopulatePageNavigate();
        }


        
/**//// <summary>
        
/// 单击翻页按钮控制翻页
        
/// </summary>

        private void LBtnPager_Click(object sender, System.EventArgs e)
        
...{
            LinkButton btn 
= (LinkButton)sender;
            
switch(btn.CommandName)
            
...{
                
case "First":
                    
this.relatedDataGrid.CurrentPageIndex = 0;
                    
break;
                
case "Prev":
                    
if(relatedDataGrid.CurrentPageIndex > 0)
                    
...{
                        relatedDataGrid.CurrentPageIndex 
= relatedDataGrid.CurrentPageIndex - 1 ;
                    }

                    
break;
                
case "Next":
                    
if(relatedDataGrid.CurrentPageIndex < relatedDataGrid.PageCount - 1)
                    
...{
                        relatedDataGrid.CurrentPageIndex 
= relatedDataGrid.CurrentPageIndex  + 1 ;
                    }

                    
break;
                
case "Last":
                    relatedDataGrid.CurrentPageIndex 
= relatedDataGrid.PageCount -1 ;
                    
break;
            }


            
this.DataBind();
        }


        
/**//// <summary>
        
/// 跳转页下拉列表控制分页
        
/// </summary>

        private void ddlPagerNavigate_SelectedIndexChanged(object sender, System.EventArgs e)
        
...{
            
if(this.ddlPagerNavigate.SelectedIndex > 0)
            
...{
                relatedDataGrid.CurrentPageIndex 
= this.ddlPagerNavigate.SelectedIndex;
                
this.DataBind();
            }

        }

        
#endregion

    }

 

      附上分页效果图,下一步的目标是把用户控件改写成复合控件,那样就方便图形化设置属性了

datagrid自定义分页控件

  • qq_31971935
  • qq_31971935
  • 2016年08月10日 17:32
  • 523

dataGrid控件的自定义分页(已调试通过)

  private void DataGNews_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs ...
  • zhanglei5415
  • zhanglei5415
  • 2007年02月07日 08:16
  • 725

WPF DataGrid分页功能实现代码

在Silverlight中DataGrid分页可以结合DataPager控件很容易实现,但是在WPF中没有类似的,需要手动实现这样一个控件:1、创建一个UserControl,DP.xaml,代码如下...
  • taomanman
  • taomanman
  • 2012年11月25日 12:00
  • 14619

jQuery easyUI Pagination控件自定义div分页(不用datagrid)

一般后台管理页面分页是通过datagrid加Pagination分页,但是如果前台页面没有用表格,例如博客的文章列表从上到下一般是到div分页, 这时如果还要用Pagination,则可以这样: 页面...
  • gdjlc
  • gdjlc
  • 2013年09月18日 17:29
  • 10156

使用Easyui pagination分页控件进行分页

1 using DbService; using System; using System.Collections.Generic; using System.Linq; using System.W...
  • Fanbin168
  • Fanbin168
  • 2015年11月15日 11:39
  • 5764

WPF 自定义分页控件DataPager.xaml

1、DataPager.xaml
  • qq_31971935
  • qq_31971935
  • 2016年11月15日 13:10
  • 539

如何在DataGrid 控件中实现自定义分页操作

   在一般情况下,DataGrid控件每次翻页操作时,都会将数据源中的数据重新调用依次,当数据源中的数据比较多的时候,这样就会浪费系统的资源和降低程序执行的效率,解决的办法就是如同标题所说,依靠自定...
  • stone0419
  • stone0419
  • 2007年10月06日 14:39
  • 791

DataGrid 分页控件

  DataGrid 分页控件牧月天涯(WWWFIND)2005/1/10  编制,欢迎交流…… QQ:9043403Email:wwwfind@sina.comBlog: http://blog.c...
  • WWWFIND
  • WWWFIND
  • 2005年05月03日 10:37
  • 4861

easyUI自定义DataGrid分页栏

@author 雨泽 datagrid内置一个很好特性的分页功能,自定义也相当简单,在这个教程中,我们将创建一个datagrid 和添加一些自定义按钮在分页工具栏. 查看...
  • me4405801
  • me4405801
  • 2016年01月07日 10:38
  • 365

asp.net web页面自定义分页控件

这几天学习了一下自定义分页控件,现将实现方法记录下来,亲测可以实现:1.首先创建一个.ascx文件,命名为TurnPage,然后在里面写控件前台展示的界面:2.然后在TurnPage.ascx.cs里...
  • SunMoonJP
  • SunMoonJP
  • 2017年01月19日 09:33
  • 539
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DataGrid自定义分页控件
举报原因:
原因补充:

(最多只允许输入30个字)