• Ajax自定义无刷新控件实现


    先给出本人在实例中的代码下载,供各种鸟们使用,大鸟们也可以绕过:
    下载地址,点击即可下载:https://files.cnblogs.com/learnyou/ajaxpage.rar

    下面说说该自定义无刷新分页控件原理:
          使用工具:Access + VS2008
          为了方便大家直接使用,源码中是使用了Access文件数据库的,下载源码后直接简单修改下代码中数据库路径就可以运行了。

          使用框架:Ajax,是我是我还是我,还是Ajax实现的无刷新,但是本实例中,本人对相关控件的封装,个人觉得使用还是挺方便、挺简单。

    下面给出运行页面的效果图:

          数据库是使用的Access数据库,表很简单,就是一个学生表(students),该表就是三列,很简单的数据结构,在此就不贴出截图了,大家可以直接用office打开源码中的数据库看看就是。

          下面给出核心代码,都是本人直接封装的,在App_Code文件夹的AjaxPager.cs文件中,也可以直接在下载的源码中查看,代码如下:

      1 using System;
      2 using System.Text;
      3 using System.Collections;
      4 using System.Collections.Generic;
      5 using System.Text.RegularExpressions;
      6 using System.IO;
      7 using System.Web.UI;
      8 using System.Globalization;
      9 using System.Web.UI.WebControls;
     10 using System.Web.UI.HtmlControls;
     11 
     12 namespace Demo
     13 {
     14     public interface IPageIndexChangedEventHandler
     15     {
     16         void BindData(int pageIndex, int pageSize);
     17     }
     18 
     19     public class AjaxPager : Control, ICallbackEventHandler, INamingContainer
     20     {
     21         #region Member Variables
     22 
     23         private int lowerBound;
     24         private int upperBound;
     25         private HyperLink previousLink;
     26         private HyperLink nextLink;
     27         private HyperLink firstLink;
     28         private HyperLink lastLink;
     29         private Control targetControl;
     30 
     31         #endregion
     32 
     33         #region Public Properties
     34 
     35         public int PageIndex
     36         {
     37             get
     38             {
     39                 int pageIndex = 1;
     40                 if (Page != null && Page.IsPostBack && ViewState["PageIndex"] != null)
     41                 {
     42                     pageIndex = (int)ViewState["PageIndex"];
     43                 }
     44                 if (pageIndex < 1)
     45                 {
     46                     return 1;
     47                 }
     48                 else
     49                 {
     50                     return pageIndex;
     51                 }
     52             }
     53             set
     54             {
     55                 ViewState["PageIndex"] = value;
     56             }
     57         }
     58         public int PageSize
     59         {
     60             get
     61             {
     62                 int pageSize = Convert.ToInt32(ViewState["PageSize"]);
     63                 if (pageSize <= 0)
     64                 {
     65                     return 10;
     66                 }
     67                 return pageSize;
     68             }
     69             set
     70             {
     71                 ViewState["PageSize"] = value;
     72             }
     73         }
     74         public int LeftLength
     75         {
     76             get
     77             {
     78                 return PageLength / 2;
     79             }
     80         }
     81         public int RightLength
     82         {
     83             get
     84             {
     85                 return PageLength / 2;
     86             }
     87         }
     88         public int PageLength
     89         {
     90             get
     91             {
     92                 int pageLength = Convert.ToInt32(ViewState["PageLength"]);
     93 
     94                 if (pageLength <= 3)
     95                     return 3;
     96 
     97                 if (pageLength % 2 == 0)
     98                 {
     99                     return pageLength + 1;
    100                 }
    101 
    102                 return pageLength;
    103             }
    104             set
    105             {
    106                 ViewState["PageLength"] = value;
    107             }
    108 
    109         }
    110         public int TotalPages
    111         {
    112             get
    113             {
    114                 return CalculateTotalPages(TotalRecords);
    115             }
    116         }
    117         public int TotalRecords
    118         {
    119             get
    120             {
    121                 return Convert.ToInt32(ViewState["TotalRecords"]);
    122             }
    123             set
    124             {
    125                 ViewState["TotalRecords"] = value;
    126             }
    127         }
    128         public string DataWrapperID
    129         {
    130             get
    131             {
    132                 string s = ViewState["DataWrapperID"] as string;
    133                 if (s == null)
    134                 {
    135                     s = string.Empty;
    136                 }
    137                 return s;
    138             }
    139             set
    140             {
    141                 ViewState["DataWrapperID"] = value;
    142             }
    143         }
    144         public string TargetControlID
    145         {
    146             get
    147             {
    148                 string s = ViewState["TargetControlID"] as string;
    149                 if (s == null)
    150                 {
    151                     s = string.Empty;
    152                 }
    153                 return s;
    154             }
    155             set
    156             {
    157                 ViewState["TargetControlID"] = value;
    158             }
    159         }
    160 
    161         #endregion
    162 
    163         #region Overrides Methods
    164 
    165         protected override void OnLoad(EventArgs e)
    166         {
    167             if (!Page.IsPostBack)
    168             {
    169                 CreatePageLinks();
    170                 RegisterClientScripts();
    171             }
    172             else
    173             {
    174                 targetControl = FindControl(this, TargetControlID);
    175             }
    176         }
    177         protected override void Render(HtmlTextWriter writer)
    178         {
    179             if (TotalPages <= 1)
    180             {
    181                 return;
    182             }
    183             RenderFirst(writer);
    184             RenderPrevious(writer);
    185             RenderPagingButtons(writer);
    186             RenderNext(writer);
    187             RenderLast(writer);
    188         }
    189 
    190         #endregion
    191 
    192         #region Public Methods
    193 
    194         public virtual int CalculateTotalPages(int totalRecords)
    195         {
    196             int totalPagesAvailable;
    197 
    198             if (totalRecords == 0)
    199             {
    200                 return 0;
    201             }
    202 
    203             totalPagesAvailable = totalRecords / PageSize;
    204 
    205             if ((totalRecords % PageSize) > 0)
    206             {
    207                 totalPagesAvailable++;
    208             }
    209 
    210             return totalPagesAvailable;
    211 
    212         }
    213 
    214         #endregion
    215 
    216     }
    217 }

          好了,基本就是这么多,源码在文章开头部分,可以直接down下来看看就是。本人觉得这种封装方式实现效果还行,当前项目中就有应用,大家可以看看效果,见网址:http://www.bjp111.com

          源码较多,本人只贴出了一部分,还请大家见谅,更多部分可以直接下载源码,VS打开就是,里面很清楚。
    就先到这里,大家有什么问题可以直接留言交流。

  • 相关阅读:
    Asp.net的HTTP请求处理过程
    通过16道练习学习Linq和Lambda
    学习资料
    .NET处理HTTP请求
    new override virtual 区别与用法
    13个优秀的UML建模工具软件
    做iOS开发程序员10个必需的iOS开发工具和资源[转]
    jQuery的deferred对象详解
    MySQL 5.0存储过程编程入门(转)
    简单谈谈事件与委托(转)
  • 原文地址:https://www.cnblogs.com/learnyou/p/2989015.html
Copyright © 2020-2023  润新知