博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手把手教你如何扩展GridView之个性分页
阅读量:6592 次
发布时间:2019-06-24

本文共 4093 字,大约阅读时间需要 13 分钟。

最新重构源码下载:     
整天面对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();
        }
这样就轻而易举的实现了一个个性的分页,欢迎各位大虾拍砖。
上篇文章地址:
                           
                          
                        
                         
你可能感兴趣的文章
“与中国同创”支持中国成为创新的第一现场
查看>>
《中国人工智能学会通讯》——6.28 李德毅 : 对人工智能要有点敬畏之心
查看>>
你想知道的关于Hadoop数据资源池的一切
查看>>
四个问题让你了解什么是DCIM?
查看>>
市民尽享精彩生活 探究智慧银川的背后
查看>>
打开“互联运输”新视野 oTMS获A+轮融资
查看>>
《中国人工智能学会通讯》——7.16 什么是篇章语义分析
查看>>
网件Netgear多款路由器存在任意命令注入漏洞 R7000 POC已经开始流传 据说升级固件都没用...
查看>>
智能工厂关键技术:感测组件与大数据分析
查看>>
后门还是漏洞?海康威视建议你尽快升级固件
查看>>
分析:云计算时代即将到来
查看>>
CIO如何构建扁平化的IT部门?
查看>>
IDC:到2019年物联网开支预计突破1.3万亿美元
查看>>
边缘计算架构增强数据中心—雾计算、边缘计算正蓬勃兴起
查看>>
将线下场景搬到线上,青牛软件发布视频呼叫中心产品
查看>>
国内航空业大数据新应用:星环助力厦门航空
查看>>
httpoxy漏洞远程攻击PHP Python应用
查看>>
解读非法泄露的数据和隐私的流入路径
查看>>
ImageMagick再爆DoS漏洞CVE-2017-8830 7.0.5及7.0.6版本受影响 波及多个Ubuntu Linux版本
查看>>
近几年前端技术盘点以及 2016 年技术发展方向
查看>>