手把手教你如何扩展GridView之个性分页

最新重构源码下载: 打造0代码全自动GridView-天具神力    
整天面对GridView的分页,早就厌烦了,下面就谈下如何给GridView扩展出个性的分页来,首先看看运行效果图:
                        
下面谈下重要的实现的思路的实现代码:
    实现思路和上文的Excel和Word导出是一样的,就是在GridView中添加行,首先声明以下控件,用于显示页次:第几页,共多少页,多少记录,首页,上一页,下一页,尾页
用于分页的控件
  Label lblCurrentPage;
        Label lblPageCount;
        Label lblRowsCount;
        LinkButton btnFirst;
        LinkButton btnPrev;
        LinkButton btnNext;
        LinkButton btnLast;
在GridView的OnInit方法中,初始化这些控件
在控件的Oninit方法初始化分页控件
 protected override void OnInit(EventArgs e)
        
{
            
this.EnableViewState = true;          

            lblCurrentPage 
= new Label();
            lblCurrentPage.ForeColor 
= ColorTranslator.FromHtml("#e78a29");
            lblCurrentPage.Text 
= "1";

            lblPageCount 
= new Label();
            lblPageCount.Text 
= "1";


            lblRowsCount 
= new Label();
            lblRowsCount.ForeColor 
= ColorTranslator.FromHtml("#e78a29");

            btnFirst 
= new LinkButton();
            btnFirst.Text 
= "首页";
            btnFirst.Command 
+= new CommandEventHandler(NavigateToPage);
            btnFirst.CommandName 
= "Pager";
            btnFirst.CommandArgument 
= "First";

            btnPrev 
= new LinkButton();
            btnPrev.Text 
= "上一页";
            btnPrev.Command 
+= new CommandEventHandler(NavigateToPage);
            btnPrev.CommandName 
= "Pager";
            btnPrev.CommandArgument 
= "Prev";

            btnNext 
= new LinkButton();
            btnNext.Text 
= "下一页";
            btnNext.Command 
+= new CommandEventHandler(NavigateToPage);
            btnNext.CommandName 
= "Pager";
            btnNext.CommandArgument 
= "Next";

            btnLast 
= new LinkButton();
            btnLast.Text 
= "尾页";
            btnLast.Command 
+= new CommandEventHandler(NavigateToPage);
            btnLast.CommandName 
= "Pager";
            btnLast.CommandArgument 
= "Last";

            
base.OnInit(e);
        }


然后是关键部分的代码,就是将这些控件如何添加到GridView中,通过在创建子控件的方式,如下:
在创建子控件的方法中添加分页控件
   protected override int CreateChildControls(System.Collections.IEnumerable dataSource, bool dataBinding)
        
{
            
int res = base.CreateChildControls(dataSource, dataBinding);
            
if (ShowToolBar)
            
{
                
try
                
{
                    GridViewRow row 
= new GridViewRow(00, DataControlRowType.Pager, DataControlRowState.Normal);
                    TableCell c 
= new TableCell();
                    c.Width 
= Unit.Percentage(100);
                    c.ColumnSpan 
= this.Columns.Count;                  
                    row.Cells.Add(c);
                    TableCell cell1 
= new TableCell();
                    Table table 
= new Table();
                    TableRow r 
= new TableRow();
                    table.Rows.Add(r);
                    table.Width 
= Unit.Percentage(100);
                    c.Controls.Add(table);
                    r.Cells.Add(cell1);
                    Literal l1 
= new Literal();
                    l1.Text 
= "页次:";
                    cell1.Controls.Add(l1);
                    cell1.Wrap 
= false;
                    cell1.Controls.Add(lblCurrentPage);
                    l1 
= new Literal();
                    l1.Text 
= "页/";
                    cell1.Controls.Add(l1);
                    cell1.Controls.Add(lblPageCount);
                    l1 
= new Literal();
                    l1.Text 
= "页,共";
                    cell1.Controls.Add(l1);
                    cell1.Controls.Add(lblRowsCount);
                    l1 
= new Literal();
                    l1.Text 
= "条记录";
                    cell1.HorizontalAlign 
= HorizontalAlign.Left;
                    cell1.Controls.Add(l1);
                    TableCell cell2 
= new TableCell();
                    cell2.HorizontalAlign 
= HorizontalAlign.Right;
                    cell2.Wrap 
= false;         


                    l1 
= new Literal();
                    l1.Text 
= " [";
                    cell2.Controls.Add(l1);
                    cell2.Controls.Add(btnFirst);
                    l1 
= new Literal();
                    l1.Text 
= "";
                    cell2.Controls.Add(l1);

                    l1 
= new Literal();
                    l1.Text 
= " [";
                    cell2.Controls.Add(l1);
                    cell2.Controls.Add(btnPrev);
                    l1 
= new Literal();
                    l1.Text 
= "";
                    cell2.Controls.Add(l1);

                    l1 
= new Literal();
                    l1.Text 
= " [";
                    cell2.Controls.Add(l1);
                    cell2.Controls.Add(btnNext);
                    l1 
= new Literal();
                    l1.Text 
= "";
                    cell2.Controls.Add(l1);

                    l1 
= new Literal();
                    l1.Text 
= " [";
                    cell2.Controls.Add(l1);
                    cell2.Controls.Add(btnLast);
                    l1 
= new Literal();
                    l1.Text 
= "";
                    cell2.Controls.Add(l1);
                    r.Cells.Add(cell2);
                    
this.Controls[0].Controls.AddAt(0, row);
                }

                
catch
                
{
                }

            }

            
return res;
        }
下面就是处理分页的事件,类似于RowCommand
  public   void  NavigateToPage( object  sender, CommandEventArgs e)
        
{
            btnFirst.Enabled 
= true;
            btnPrev.Enabled 
= true;
            btnNext.Enabled 
= true;
            btnLast.Enabled 
= true;
            
switch (e.CommandArgument.ToString())
            
{
                
case "Prev":
                    
if (this.PageIndex > 0)
                    
{
                        
this.PageIndex -= 1;

                    }

                    
break;
                
case "Next":
                    
if (this.PageIndex < (this.PageCount - 1))
                    
{
                        
this.PageIndex += 1;

                    }

                    
break;
                
case "First":
                    
this.PageIndex = 0;
                    
break;
                
case "Last":
                    
this.PageIndex = this.PageCount - 1;
                    
break;
            }

            
if (this.PageIndex == 0)
            
{
                btnFirst.Enabled 
= false;
                btnPrev.Enabled 
= false;
                
if (this.PageCount == 1)
                
{
                    btnLast.Enabled 
= false;
                    btnNext.Enabled 
= false;
                }

            }

            
else if (this.PageIndex == this.PageCount - 1)
            
{
                btnLast.Enabled 
= false;
                btnNext.Enabled 
= false;
            }

            OnBind();
        }
这样就轻而易举的实现了一个个性的分页,欢迎各位大虾拍砖。
上篇文章地址:
                          手把手教你如何扩展GridView之自带Excel和Word导出 
                         手把手教你如何扩展GridView之自带分页 
                         手把手教你如何扩展GridView之自带CheckBox
                          手把手教你如何扩展GridView之自动排序篇

转载于:https://www.cnblogs.com/jillzhang/archive/2007/06/12/779934.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值