• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      ASP.NET自定義分頁導(dǎo)航控件設(shè)計

      2017-04-27 08:25蔣亞虎陳永松
      電腦知識與技術(shù) 2016年29期

      蔣亞虎 陳永松

      摘要:針對ASENET開發(fā)中分頁的需求,提出一種可行的方案,開發(fā)自定義的分頁導(dǎo)航控件,可應(yīng)用于需要分頁導(dǎo)航功能的任何數(shù)據(jù)綁定控件。分頁導(dǎo)航控件和數(shù)據(jù)是分離的,數(shù)據(jù)的顯示由用戶控制。通過設(shè)置分頁導(dǎo)航控件屬性和編寫簡單調(diào)用代碼,實現(xiàn)分頁導(dǎo)航功能,還可以通過URL切換頁碼。文章介紹了自定義分頁導(dǎo)航控件的設(shè)計過程,并通過實例詳細(xì)介紹了分頁導(dǎo)航控件的使用方法。

      關(guān)鍵詞:ASP.NET;分頁導(dǎo)航控件;URL

      中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2016)29-0004-04

      在ASP.NET開發(fā)中,為了方便排版及瀏覽,經(jīng)常需要使用分頁來實現(xiàn)。在數(shù)據(jù)量不大的情況下可以使用數(shù)據(jù)綁定控件的分頁功能n,實現(xiàn)這一需求。對于數(shù)據(jù)量較大的需求,一般通過編寫SQL語句或存儲過程實現(xiàn)分頁。分頁功能實現(xiàn)難度不大,但要實現(xiàn)功能較為完善的分頁導(dǎo)航功能,代碼編寫量大而且代碼重用率低。本文提出一種利用Repeater控件實現(xiàn)自定義分頁導(dǎo)航控件的方法,代碼實現(xiàn)簡單,可重用率高。

      1分頁導(dǎo)航控件前端設(shè)計

      在VS2010中添加一個Web用戶控件,文件名為Pager.as-cx。前端代碼設(shè)計如圖1所示。

      前端設(shè)計后效果如圖2所示,其中數(shù)據(jù)綁定用來顯示相應(yīng)的頁碼。

      2分頁導(dǎo)航控件后端設(shè)計

      2.1屬性和事件定義

      在pager類中定義三個屬性PageSizef導(dǎo)航中顯示的頁碼數(shù))、PerPageRecord(每頁記錄數(shù))、RecordCount(總記錄數(shù))。代碼如下:

      public im PageSize{get;set;}

      public int PerPageRecord{get;set;}

      public im RecordCount{get;set;}

      定義屬性PageCount(總頁數(shù)),與lblSumPage控件關(guān)聯(lián)。

      public im PageCount

      {

      get

      {

      return Convert.ToInt320blSumPage.Text);

      }

      set

      {

      lblSumPage.Text=value.ToString();

      }

      }

      定義屬性CurrentPage(當(dāng)前頁碼),與ltlCurrentPage控件關(guān)聯(lián)。

      public im CurrentPage

      {

      get

      {

      return Convert.ToInt32(ltlCurrentPage.Text);

      }

      set

      {

      hlCurrentPage.Text=value.ToString();

      }

      }

      定義事件ItemCommand(點擊頁碼之后觸發(fā)的事件),代碼如下:

      public event RepeaterCommandEventHandler ItemCommand;

      2.2分頁導(dǎo)航代碼實現(xiàn)

      分頁導(dǎo)航控件的原理是通過控制lbtnPager控件顯示的數(shù)量和效果來實現(xiàn)分頁導(dǎo)航效果,為了方便代碼的書寫,定義pa-genum類,代碼如下:

      public class pagenum

      {

      public string text{get;set;}

      publicint Bum{get;set;}

      publicbool enable{get;set;}

      }

      定義計算總頁數(shù)方法。

      public void calcPageCount()

      {

      if(PerPageRecord==0)

      PerPageRecord=20;

      PageCount=(RecordCount-1)/PerPageRecord+1;

      }

      定義bind方法,功能是根據(jù)總頁數(shù)、當(dāng)前頁碼、導(dǎo)航中顯示的頁碼數(shù),控制lbtnPager控件顯示的數(shù)量和效果。

      public void bind()

      {

      if(PageCount<=1)

      spanl.Visible=false;

      else

      {

      if(PageSize==0)PageSize=5;

      if(CurrentPage>PageCount)

      CurrentPage=PageCount;

      Listnums=new ListO;

      if(CurrentPage !=1)//如果不是首頁

      {

      pagenum nun=new pagenumO;

      num.text="首頁";

      num.num=1:

      num.enable=true;

      BUlTIS.Add(num);

      }

      int m=fcurrentPage-1)/PageSize;

      if(m !=0)//如果不是1~PageSize頁

      {

      pagenum num=new pagenum0;

      num.text="…":

      num.num=m*PageSize;

      num.enable=true;

      nums.Add(num);

      }

      for(intj=1;j<=PageSize;j++)

      //添加m*PageSize+1-m*PageSize+PageSize頁頁碼

      {

      if(j+m*PageSize>PageCounI)break;

      pagenum num=new pagenum();

      Bum.text=(i+m*PageSize).ToString();

      Bum.num=j+m*PageSize;

      if(j+m*PageSize==CurrentPage)

      Hum.enable=false;

      else

      Bum.enable=true;

      nums.Add(hum);

      }

      if((m+1)*PageSize

      //如果最后一頁的頁碼沒顯示

      {

      pagenum hum=new pagenum0;

      num.text="…":

      Bum.BUm=((m+1)*PageSize+1);

      Hum.enable=true;

      nums.Add(num);

      }

      if(CurrentPage!=PageCount)//如果不是尾頁

      {

      pagenum Bum=new pagenumO;

      Bum.text="尾頁":

      Bum.num=PageCount;

      Bum.enable=true;

      nums.Add(num);

      }

      rptPage.DataSource=nums;

      }

      rptPage.DataBind0;

      }

      定義Refresh方法,調(diào)用calcPageCount和bind方法,刷新分頁導(dǎo)航控件。

      public void Refresh()

      {

      calcPageCount();

      bind();

      }

      定義PageFromUrl方法,根據(jù)Url地址返回當(dāng)前頁碼。

      pubhc void PageFromUn()

      {

      if(Request.QueryString[”Page”]!=null)

      {

      inti:

      int.TryParse(Request.QueryStrind["Page"],out i);

      if(i!=0)CurrentPage=i;

      }

      }

      定義PageToUrl方法,根據(jù)所選頁碼,生成Url地址。

      public void PageToUA0

      {

      string url=Request.Url.ToString0;

      im n=url.IndexOf("?Page=");

      if(n==1)n=url.Length;

      Response.Redirect(url.Substring(0,n)+"?Page="+Cur-rentPage);

      }

      定義rptPage_ItemCommand事件代碼,點擊頁碼后可觸發(fā)用戶事件。

      CurrentPage=Convert.ToInt32(e.CommandArgument);

      ItemCommand(source,e);

      bind();

      3使用分頁導(dǎo)航控件

      3.1引入分頁導(dǎo)航控件

      將分頁導(dǎo)航控件復(fù)制到ASP.NET網(wǎng)站中,然后在web窗體頁面中利用@Register指令引入。如圖3所示。

      引入分頁導(dǎo)航控件后,通過ucl:Pager標(biāo)記將控件顯示在需要的位置,以及屬性設(shè)置。如圖4所示。

      3.2使用分頁導(dǎo)航控件的實例

      下面以Repeater控件綁定Student表數(shù)據(jù)為例介紹分頁導(dǎo)航控件的使用。

      3.2.1前端設(shè)計

      添加一個Repeater控件,設(shè)置前端代碼如圖5所示。

      然后在Repeater控件下方添加一個分頁導(dǎo)航控件,代碼如圖4所示。

      3.2.2后端設(shè)計

      定義calcRecordCount方法,功能是計算Student表的記錄數(shù),其中cns為連接串。

      void calcRecordCount()

      {

      using(SqlConnection cn=new SqlConnection(cns))

      {

      string sql="select count(1)from student";

      SqlCommand cm=new SqlCommand(sql,cn);

      cn.Open();

      int n=(int)cm.ExecuteScalar0;

      pgrStudent.RecordCount=n:

      }

      }

      定義bind方法,功能是將指定頁碼的數(shù)據(jù)綁定到Repeater控件。

      void bind()

      {

      string sql="select*from(select sid,sname,sex,birth,"+

      "row_numbero over(order by sid)Hum from student)as a"+

      "where nun between"+

      "(@CurrnetPage-1)*@PerPageRecord+1"+

      "and@CurrnetPage*@PerPageRecord":

      using(SqlConnection cn=new SqlConnection(cns))

      {

      SqlParameter[]para=

      {

      new SqlParameter

      ("@CurrnetPage",pgrStudent.CurrentPage),

      new SqlParameter

      ("@PerPageRecord",pgrStudent.PerPageRecord)

      };

      SqlCommand cm=new SqlCommand(sql,cn);

      cm.Parameters.AddRange(para);

      cn.Open();

      rptStudent.DataSource=cm.ExecuteReader();

      rptStudent.DataBind();

      }

      }

      編寫Load事件代碼,功能是首次加載時初始化顯示的數(shù)據(jù)。

      protected void Page_Load(object sender,EventArgs e)

      {

      if(!IsPostBack)

      {

      calcRecordCount();

      pgrStudent.Refresh();

      bind();

      }

      }

      編寫pgrStudent_ItemCommand事件代碼,定義點擊頁碼后需要顯示的數(shù)據(jù)。

      protected void pgrStudenLItemCommand(object sender,

      RepeaterCommandEventArgs e)

      {

      bind();

      }

      編寫rptStudenLItemCommand事件代碼,實現(xiàn)刪除功能。

      protected void rptStudenLItemCommand(object source,

      RepeaterCommandEventArgs e)

      {

      if(e.CommandName=="Del")

      {

      using(SqlConnection cn=new SqlConnection(cns))

      {

      string sql="delete student where sid=@sid":

      SqlCommand cm=new SqlCommand(sql,cn);

      SqlParameter[]para=

      {

      new SqlParameterf"@sid",

      e.CommandArgument.ToString()

      };

      cm.Parameters.AddRange(para);

      cn.Open();

      cm.ExecuteNonQuery();

      calcRecordCount();

      pgrStudent.Refresh();

      bind();

      }

      }

      }

      插入功能的寫法與刪除功能的寫法相類似,這里不再舉例。

      3.2.3運行效果

      運行效果如圖6所示。

      刪除數(shù)據(jù)時,如果將最后一頁的數(shù)據(jù)全部刪除,總頁數(shù)會自動減1。

      3.2.4通過Url地址切換頁碼

      在實際應(yīng)用中,有時希望通過Url地址切換頁碼,如輸入“http://網(wǎng)址?Page=10”可以直接跳轉(zhuǎn)到第10頁。

      如果希望實現(xiàn)這樣的效果,需要將代碼進行少量修改。

      Load事件代碼:在pgrStudent.Refresh0;前面增加一條語句:pgrStudent.PageFromUrl();

      pgrStudent_ItemCommand事件代碼:將bind0;刪除,改為:pgrStudent.PageToUrl();

      rptStudenLItemCommand事件代碼:將最后三條語句刪除,改為:pgrStudent.PageToUrl();

      4總結(jié)

      本文詳細(xì)介紹了自定義分頁導(dǎo)航控件的設(shè)計過程,巧妙利用Repeater控件的數(shù)據(jù)綁定功能,動態(tài)實現(xiàn)生成分頁導(dǎo)航功能。控件可采用PostBack方式進行分頁,也可通過Url地址進行頁面切換。使用自定義分頁導(dǎo)航控件,用戶只需要考慮如何顯示顯示和控制數(shù)據(jù),而分頁功能寫少量代碼和設(shè)置少量屬性就可實現(xiàn)。用戶還可以通過修改自定義控件,擴充所需功能,如轉(zhuǎn)到某某頁功能,增加少量代碼就可實現(xiàn)。

      雷山县| 呼图壁县| 瑞丽市| 扶风县| 昌乐县| 舟曲县| 二连浩特市| 喀喇沁旗| 万年县| 泾阳县| 抚松县| 郧西县| 加查县| 岫岩| 伊宁市| 搜索| 达州市| 宜兰县| 原平市| 潞城市| 靖宇县| 荃湾区| 黔南| 堆龙德庆县| 万全县| 安平县| 宜兰县| 梁平县| 天津市| 南投市| 柯坪县| 措美县| 呼和浩特市| 休宁县| 安平县| 汨罗市| 安宁市| 无棣县| 寿宁县| 天水市| 上蔡县|