- 浏览: 61499 次
- 性别:
- 来自: 上海
最新评论
-
feipigzi:
我觉得文章内容不如改成四个字——“顾名思义”
FRAMESET和IFRAME各自的优点和缺点 -
yuchujin:
这个也太短了吧
FRAMESET和IFRAME各自的优点和缺点
打造一个通用ASP.NET数据分页控件 |
发布于:2006-8-15 17:23:08 已被阅读: <script src="http://www.dwww.cn/hits.asp?ID=2804" type="text/javascript"></script> 288 138 33 |
对于几乎所有的数据表现Web应用来说,组织好数据的显示方式、避免给用户带来混乱的感觉就是最主要的目标之一。每个页面显示20条记录当然是可以接受的,但每页显示10000条记录就很容易给用户带来不便了。将数据分成多个页面显示,即对数据进行分页,是解决此类问题的最常见的办法。 一、慨述 ASP.NET本身只提供了一个支持数据分页的控件,即DataGrid分页控件,不过它比较适合Intranet环境使用,对于Internet环境来说,DataGrid分页控件提供的功能似乎不足以构造出灵活的Web应用。其中一个原因是,DataGrid控件对Web设计者放置分页控件的位置和分页控件的外观都有限制,例如,DataGrid控件不允许垂直放置分页控件。另一个能够发挥分页技术优势的控件是Repeater,Web开发者可以利用Repeater控件快速配置数据的显示方式,但分页功能却需要开发者自己实现。数据源在不断地变化,数据表现方式也千差万别,如果针对这些不断变动的条件分别定制分页控件,显然太浪费时间了,构造一个不限于特定表现控件的通用分页控件将极大地有利于节省时间。 一个优秀的通用数据控件不仅提供常规的分页功能,而且还要能够: ⑴ 提供“首页”、“上一页”、“下一页”、“末页”分页导航按钮。 ⑵ 根据数据显示情况调整自身的状态,即具有数据敏感性。如果分页控件被设置成每页显示10个记录,但实际上只有9个记录,那么分页控件不应该显示出来;在数据分成多页显示的情况下,第一个页面的“首页”、“上一页”按钮不应显示出来,最后一个页面的“下一页”、“末页”按钮也不应该显示出来。 ⑶ 不能依赖于特定的数据显示控件。 ⑷ 具有适应各种现有、将有数据源的能力。 ⑸ 应当能够方便地配置显示方式,轻松地集成到各种应用之中。 ⑹ 当分页就绪时,提醒其他控件。 ⑺ 即使是缺乏经验的Web设计者,也要能够毫无困难地使用。 ⑻ 提供有关分页信息的属性数据。 目前市场上已经有一些提供上述功能的商业性控件,不过都价格不菲。对于许多开发者来说,自己构造一个通用的分页控件是最理想的选择。 图一显示了本文通用分页控件的运行界面,其中用于显示的控件是一个Repeater控件。分页控件由两类部件构成:四个导航按钮,一组页面编号链接。
二、核心功能 public string BindToControl
{ get { if (_bindcontrol == null) throw new NullReferenceException("在使用分页控件之前,请先通过设置BindToControl属性绑定到一个控件。"); return _bindcontrol;} set{_bindcontrol=value;} }
protected override void OnInit(EventArgs e)
{ _boundcontrol = Parent.FindControl(BindToControl); BoundControl.DataBinding += new EventHandler(BoundControl_DataBound); base.OnInit(e); ... }
private void BoundControl_DataBound(object sender,System.EventArgs e)
{ if (HasParentControlCalledDataBinding) return; Type type = sender.GetType(); _datasource = type.GetProperty("DataSource"); if (_datasource == null) throw new NotSupportedException("分页控件要求表现控件必需包含一个DataSource。"); object data = _datasource.GetGetMethod().Invoke(sender,null); _builder = Adapters[data.GetType()]; if (_builder == null) throw new NullReferenceException("没有安装适当的适配器来处理下面的数据源类型:"+data.GetType()); _builder.Source = data; ApplyDataSensitivityRules(); BindParent(); RaiseEvent(DataUpdate,this); }
在DataBound中,我们尝试通过Reflection API获得DataSource属性,然后返回实际数据源的一个引用。现在虽然已经获知了数据源,但分页控件还必须知道如何操作该数据源。为了让分页控件不依赖于特定的表现控件,问题复杂了很多。不过,如果让分页控件依赖于特定的数据源,那就背离了设计一个灵活的分页控件的目标。我们要通过一个接插式的体系结构来确保分页控件能够处理各种数据源,无论是.NET提供的数据源,还是自定义的数据源。
publicinterface IDataSourceAdapter
{ int TotalCount{get;} object GetPagedData(int start,int end); }
internal class DataViewAdapter:IDataSourceAdapter
{ private DataView _view; internal DataViewAdapter(DataView view) { _view = view; } public int TotalCount { get{return (_view == null) ? 0 : _view.Table.Rows.Count;} } public object GetPagedData(int start, int end) { DataTable table = _view.Table.Clone(); for (int i = start;i<=end && i<= TotalCount;i++) { table.ImportRow(_view[i-1].Row); } return table; } }
public abstract class AdapterBuilder
{ private object _source; private void CheckForNull() { if (_source == null) throw new NullReferenceException("必须提供一个合法的数据源"); } public virtual object Source { get { CheckForNull(); return _source;} set { _source = value; CheckForNull(); } } public abstract IDataSourceAdapter Adapter{get;} }
public class DataTableAdapterBuilder:AdapterBuilder
{ private DataViewAdapter _adapter; private DataViewAdapter ViewAdapter { get { if (_adapter == null) { DataTable table = (DataTable)Source; _adapter = new DataViewAdapter(table.DefaultView); } return _adapter; } } public override IDataSourceAdapter Adapter { get { return ViewAdapter; } } } public class DataViewAdapterBuilder:AdapterBuilder { private DataViewAdapter _adapter; private DataViewAdapter ViewAdapter { get { // 延迟实例化 if (_adapter == null) { _adapter = new DataViewAdapter((DataView)Source); } return _adapter; } } public override IDataSourceAdapter Adapter { get{return ViewAdapter;} } }
public class AdapterCollection:DictionaryBase
{ private string GetKey(Type key) { return key.FullName; } public AdapterCollection() {} publicvoid Add(Type key,AdapterBuilder value) { Dictionary.Add(GetKey(key),value); } publicbool Contains(Type key) { return Dictionary.Contains(GetKey(key)); } publicvoid Remove(Type key) { Dictionary.Remove(GetKey(key)); } public AdapterBuilder this[Type key] { get{return (AdapterBuilder)Dictionary[GetKey(key)];} set{Dictionary[GetKey(key)]=value;} } }
public AdapterCollection Adapters
{ get{return _adapters;} } private bool HasParentControlCalledDataBinding { get{return _builder != null;} } private void BoundControl_DataBound(object sender,System.EventArgs e) { if (HasParentControlCalledDataBinding) return; Type type = sender.GetType(); _datasource = type.GetProperty("DataSource"); if (_datasource == null) throw new NotSupportedException("分页控件要求表现控件必需包含一个DataSource。"); object data = _datasource.GetGetMethod().Invoke(sender,null); _builder = Adapters[data.GetType()]; if (_builder == null) throw new NullReferenceException("没有安装适当的适配器来处理下面的数据源类型:"+data.GetType()); _builder.Source = data; ApplyDataSensitivityRules(); BindParent(); RaiseEvent(DataUpdate,this); }
public Pager()
{ SelectedPager=new System.Web.UI.WebControls.Style(); UnselectedPager = new System.Web.UI.WebControls.Style(); _adapters = new AdapterCollection(); _adapters.Add(typeof(DataTable),new DataTableAdapterBuilder()); _adapters.Add(typeof(DataView),new DataViewAdapterBuilder()); }
private void BindParent()
{ _datasource.GetSetMethod().Invoke(BoundControl, new object[]{_builder.Adapter.GetPagedData(StartRow,ResultsToShow*CurrentPage)}); }
三、界面设计
public ImageButton FirstButton{get {return First;}}
public ImageButton LastButton{get {return Last;}} public ImageButton PreviousButton{get {return Previous;}} public ImageButton NextButton{get {return Next;}}
[Template Container(typeof(LayoutContainer))]
public ITemplate Layout { get{return (_layout;} set{_layout =value;} } public class LayoutContainer:Control,INamingContainer { public LayoutContainer() {this.ID = "Page";} }
<LAYOUT>
<asp:ImageButton id="First" Runat="server" imageUrl="play2L_dis.gif" AlternateText="首页"></asp:ImageButton> <asp:ImageButton id="Previous" Runat="server" imageUrl="play2L.gif" AlternateText="上一页"></asp:ImageButton> <asp:ImageButton id="Next" Runat="server" imageUrl="play2.gif" AlternateText="下一页"></asp:ImageButton> <asp:ImageButton id="Last" Runat="server" imageUrl="play2_dis.gif" AlternateText="末页"></asp:ImageButton> <asp:Panel id="Pager" Runat="server"></asp:Panel> </LAYOUT>
private void InstantiateTemplate()
{ _container = new LayoutContainer(); Layout.InstantiateIn(_container); First = (ImageButton)_container.FindControl("First"); Previous = (ImageButton)_container.FindControl("Previous"); Next = (ImageButton)_container.FindControl("Next"); Last = (ImageButton)_container.FindControl("Last"); Holder = (Panel)_container.FindControl("Pager"); this.First.Click += new System.Web.UI.ImageClickEventHandler(this.First_Click); this.Last.Click += new System.Web.UI.ImageClickEventHandler(this.Last_Click); this.Next.Click += new System.Web.UI.ImageClickEventHandler(this.Next_Click); this.Previous.Click += new System.Web.UI.ImageClickEventHandler(this.Previous_Click); }
protected override void OnInit(EventArgs e)
{ _boundcontrol = Parent.FindControl(BindToControl); BoundControl.DataBinding += new EventHandler(BoundControl_DataBound); InstantiateTemplate(); Controls.Add(_container); base.OnInit(e); }
public class DefaultPagerLayout:ITemplate
{ private ImageButton Next; private ImageButton First; private ImageButton Last; private ImageButton Previous; private Panel Pager; public DefaultPagerLayout() { Next = new ImageButton(); First = new ImageButton(); Last = new ImageButton(); Previous = new ImageButton(); Pager = new Panel(); Next.ID="Next"; Next.AlternateText="下一页";Next.ImageUrl="play2.gif"; First.ID="First"; First.AlternateText="首页";First.ImageUrl="play2L_dis.gif"; Last.ID = "Last"; Last.AlternateText ="末页";Last.ImageUrl="play2_dis.gif"; Previous.ID="Previous"; Previous.AlternateText="上一页";Previous.ImageUrl="play2L.gif"; Pager.ID="Pager"; } public void InstantiateIn(Control control) { control.Controls.Clear(); Table table = new Table(); table.BorderWidth = Unit.Pixel(0); table.CellSpacing= 1; table.CellPadding =0; TableRow row = new TableRow(); row.VerticalAlign = VerticalAlign.Top; table.Rows.Add(row); TableCell cell = new TableCell(); cell.HorizontalAlign = HorizontalAlign.Right; cell.VerticalAlign = VerticalAlign.Middle; cell.Controls.Add(First); cell.Controls.Add(Previous); row.Cells.Add(cell); cell = new TableCell(); cell.HorizontalAlign= HorizontalAlign.Center; cell.Controls.Add(Pager); row.Cells.Add(cell); cell = new TableCell(); cell.VerticalAlign = VerticalAlign.Middle; cell.Controls.Add(Next); cell.Controls.Add(Last); row.Cells.Add(cell); control.Controls.Add(table); } }
[TemplateContainer(typeof(LayoutContainer))]
public ITemplate Layout { get{return (_layout == null)? new DefaultPagerLayout():_layout;} set{_layout =value;} }
public int CurrentPage
{ get { string cur = (string)ViewState["CurrentPage"]; return (cur == string.Empty || cur ==null)? 1 : int.Parse(cur); } set { ViewState["CurrentPage"] = value.ToString();} } public int PagersToShow { get{return _results;} set{_results = value;} } public int ResultsToShow { get{return _resultsperpage;} set{_resultsperpage = value;} }
private int PagerSequence
{ get { return Convert.ToInt32 (Math.Ceiling((double)CurrentPage/(double)PagersToShow));} } private int NumberOfPagersToGenerate { get{return PagerSequence*PagersToShow;} } private int TotalPagesToShow { get{return Convert.ToInt32(Math.Ceiling((double)TotalResults/(double)_resultsperpage));} } public int TotalResults { get{return _builder.Adapter.TotalCount;} }
虽然ASP.NET定义了一些默认的样式,不过对于分页控件的用户它们可能不是很实用。用户可以通过自定义样式来调整分页控件的外观。 public Style UnSelectedPagerStyle {get {return UnselectedPager;}}
public Style SelectedPagerStyle {get {return SelectedPager;}} UnSelectedPagerStyle提供了页面编号未选中时所用的样式,而SelectedPagerStyle提供了页面编号被选中时所用的样式。 private void GeneratePagers(WebControl control)
{ control.Controls.Clear(); int pager = (PagerSequence-1)* PagersToShow +1; for (;pager<=NumberOfPagersToGenerate && pager<=TotalPagesToShow;pager++) { LinkButton link = new LinkButton(); link.Text = pager.ToString(); link.ID = pager.ToString(); link.Click += new EventHandler(this.Pager_Click); if (link.ID.Equals(CurrentPage.ToString())) link.MergeStyle(SelectedPagerStyle); else link.MergeStyle(UnSelectedPagerStyle); control.Controls.Add(link); control.Controls.Add(new LiteralControl(" ")); } } private void GeneratePagers() { GeneratePagers(Holder); } GeneratePagers方法动态地创建所有页面编号,页面编号是LinkButton类型的按钮。各个页面编号的标签和ID属性通过循环赋值,同时,点击事件被绑定到适当的事件句柄。最后,页面编号被加入到一个容器控件——在本例中是一个Panel对象。按钮ID起到了标识哪一个按钮触发点击事件的作用。下面是事件句柄的定义: private void Pager_Click(object sender, System.EventArgs e)
{ LinkButton button = (LinkButton) sender; CurrentPage = int.Parse(button.ID); RaiseEvent(PageChanged, this,new PageChangedEventArgs(CurrentPage,PagedEventInvoker.Pager)); Update(); } private void Next_Click(object sender, System.Web.UI.ImageClickEventArgs e) { if (CurrentPage<TotalPagesToShow) CurrentPage++; RaiseEvent(PageChanged, this,new PageChangedEventArgs(CurrentPage,PagedEventInvoker.Next)); Update(); } private void Previous_Click(object sender, System.Web.UI.ImageClickEventArgs e) { if (CurrentPage > 1) CurrentPage--; RaiseEvent(PageChanged, this,new PageChangedEventArgs(CurrentPage,PagedEventInvoker.Previous)); Update(); } private void First_Click(object sender, System.Web.UI.ImageClickEventArgs e) { CurrentPage = 1; RaiseEvent(PageChanged, this,new PageChangedEventArgs(CurrentPage,PagedEventInvoker.First)); Update(); } private void Last_Click(object sender, System.Web.UI.ImageClickEventArgs e) { CurrentPage = TotalPagesToShow; RaiseEvent(PageChanged, this,new PageChangedEventArgs(CurrentPage,PagedEventInvoker.Last)); Update(); } 这些事件句柄都相似,它们首先更改分页控件的当前页面,然后刷新绑定的控件。 private void Update()
{ if (!HasParentControlCalledDataBinding) return; ApplyDataSensitivityRules(); BindParent(); BoundControl.DataBind(); } 首先,分页控件通过调用HasParentControlCalledDataBinding方法检查是否已经初始化了必要的适配器。如果是,则将前面指出的根据数据显示情况自动调整控件的规则应用到当前的控件,这些规则使得分页控件根据BoundControl中数据的不同情况表现出不同的行为。虽然这些规则由分页控件内部控制,但必要时可以用[GoF] State模式方便地移出到控件之外。 public bool IsDataSensitive
{ get{return _isdatasensitive;} set{_isdatasensitive = value;} } private bool IsPagerVisible { get{return (TotalPagesToShow != 1) && IsDataSensitive;} } private bool IsPreviousVisible { get { return (!IsDataSensitive)? true: (CurrentPage != 1); } } private bool IsNextVisible { get { return (!IsDataSensitive)? true: (CurrentPage != TotalPagesToShow); } } private void ApplyDataSensitivityRules() { FirstButton.Visible = IsPreviousVisible; PreviousButton.Visible = IsPreviousVisible; LastButton.Visible = IsNextVisible; NextButton.Visible = IsNextVisible; if (IsPagerVisible) GeneratePagers(); } ApplyDataSensitivityRules方法实施预定义的规则,诸如IsPagerVisible、IsPreviousVisible和IsNextVisible。默认情况下,分页控件将启用这些规则,但用户可以通过设置IsDataSensitive属性来关闭这些规则。 至此为止,分页控件的显示部分基本设计完毕。最后剩下的结束工作是提供几个事件句柄,使得用户能够在各种分页控件事件出现时进行必要的调整。 public delegate void PageDelegate(object sender,PageChangedEventArgs e);
public enum PagedEventInvoker{Next,Previous,First,Last,Pager} public class PageChangedEventArgs:EventArgs { private int newpage; private Enum invoker; public PageChangedEventArgs(int newpage):base() { this.newpage = newpage; } public PageChangedEventArgs(int newpage,PagedEventInvoker invoker) { this.newpage = newpage; this.invoker = invoker; } public int NewPage {get{return newpage;}} public Enum EventInvoker{get{return invoker;}} } 由于分页控件需要返回自定义的事件参数,所以我们定义了一个专用的PageChangedEventArgs类。PageChangedEventArgs类返回PagedEventInvoker类型,PagedEventInvoker类型是可能触发事件的控件的枚举量。为了处理自定义的事件参数,我们定义了一个新的delegate,即PageDelegate。事件按照下面的形式定义: public event PageDelegate PageChanged;
public event EventHandler DataUpdate; 当事件没有对应的事件监听器时,ASP.NET会抛出一个异常。分页控件定义了下列RaiseEvent方法。 private void RaiseEvent(EventHandler e,object sender)
{ this.RaiseEvent(e,this,null); } private void RaiseEvent(EventHandler e,object sender, PageChangedEventArgs args) { if(e!=null) { e(sender,args); } } private void RaiseEvent(PageDelegate e,object sender) { this.RaiseEvent(e,this,null); } private void RaiseEvent(PageDelegate e,object sender, PageChangedEventArgs args) { if(e!=null) { e(sender,args); } } 现在事件句柄可以通过调用各个RaiseEvent方法来触发事件了。 四、应用实例 至此为止,分页控件的设计已经全部完成,可以正式使用了。要使用该分页控件,只要把它绑定到一个表现控件即可。 <asp:Repeater ID="repeater" Runat="server">
<ItemTemplate> 列1: <%# Convert.ToString(DataBinder.Eval(Container.DataItem,"Column1"))%> <br> 列2: <%# Convert.ToString(DataBinder.Eval(Container.DataItem,"Column2"))%> <br> 列3: <%# Convert.ToString(DataBinder.Eval(Container.DataItem,"Column3"))%> <br> <hr> </ItemTemplate> </asp:Repeater> <cc1:Pager id="pager" ResultsToShow="2" runat="server" BindToControl="repeater"> <SELECTEDPAGERSTYLE BackColor="Yellow" /> </cc1:Pager> 上面的aspx页面将分页控件绑定到一个Repeater控件,设置每页显示的记录数量为2,选中的页面编号颜色为黄色,使用默认的布局,效果如图一。下面是另一个例子,它将分页控件绑定到一个DataGrid,效果如图二。 <asp:DataGrid ID="Grid" Runat="server"></asp:DataGrid>
<cc1:Pager id="PagerGrid" ResultsToShow="2" runat="server" BindToControl="Grid"> <SELECTEDPAGERSTYLE BackColor="Red"></SELECTEDPAGERSTYLE> <LAYOUT> <asp:ImageButton id="First" Runat="server" imageUrl="play2L_dis.gif" AlternateText="首页"></asp:ImageButton> <asp:ImageButton id="Previous" Runat="server" imageUrl="play2L.gif" AlternateText="上一页"></asp:ImageButton> <asp:ImageButton id="Next" Runat="server" imageUrl="play2.gif" AlternateText="下一页"></asp:ImageButton> <asp:ImageButton id="Last" Runat="server" imageUrl="play2_dis.gif" AlternateText="末页"></asp:ImageButton> <asp:Panel id="Pager" Runat="server"></asp:Panel> </LAYOUT> </cc1:Pager>
|
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1108303
发表评论
-
全面剖析C#正则表达式
2006-06-07 16:52 1810全面剖析C#正则表达式 ... -
水晶报表注册码(收藏)
2006-06-07 16:56 2068水晶报表注册码(收藏) <script language ... -
C#中直接调用VB.NET的函数,兼论半角与全角、简繁体中文互相转化
2006-06-15 11:25 1014在C#项目中添加引用Microsoft.VisualBasic ... -
用C#生成随机中文汉字验证码的基本原理
2006-06-21 13:54 8051、汉字编码原理 到底怎么办到随机生成汉字的呢?汉字从哪里来的 ... -
用反射调用任意.net库中的方法
2006-06-21 13:55 625注: 1、ReturnMessage 是我自写的一个类,作用请 ... -
.NET框架和VS.NET中的SOAP
2006-06-21 13:56 672简介<o:p></o:p> <o ... -
.NET框架中基于角色的安全性
2006-06-21 13:57 631概述<o:p></o:p> < ... -
DotNET(C#) Socket基本编程
2006-06-21 13:59 1078Socket基本编程 服务端: using System.Ne ... -
解读C#中的规则表达式
2006-07-25 13:50 586多少年来,许多的编程 ... -
解读C#中的规则表达式
2006-07-25 13:50 667多少年来,许多的编程 ... -
ASP.NET程序中常用的三十三种代码
2006-08-24 17:12 6701. 打开新的窗口并传送参数: 传送参数:response ... -
.net的优点
2008-03-10 13:55 13901.标准集成:XML、SOAP及其它 过去,微软的体系结构建立 ... -
ASP.NET的优点与缺点
2008-03-10 13:57 3565一. ASP.NET的演变:DENALI ASP 的第一个测试 ... -
回头看.Net的优点与进步
2008-03-10 13:58 941最近公司要竞标一个项目,对方指定要.Net,因此又重操旧业, ... -
c#学习笔记(1)
2008-03-10 14:11 7611, 结构(struct) 与 类(class)[attrib ... -
Web Service中保持ASP.net的状态
2008-03-11 12:44 1927简介 网络程序开发 ... -
c#面试题及答案
2008-03-13 16:30 2820c#面试题及答案 2 .列举 ...
相关推荐
总之,AspNetPager 7.2作为一款强大的ASP.NET分页控件,通过其丰富的功能和易用性,极大地简化了开发过程,提升了Web应用的性能和用户体验。对于处理大数据量的ASP.NET项目来说,它是不可或缺的工具之一。
AspNetPager针对ASP.NET分页控件的不足,提出了与众不同的解决asp.net中分页问题的方案,即将分页导航功能与数据显示功能完全独立开来,由用户自己控制数据的获取及显示方式,因此可以被灵活地应用于任何需要实现...
AfengPager通用ASP.NET URL分页控件,很多参数可以自定义,比如分页样式的显示、分布按钮的样式、总页数(动态,前置条件:总记录数、每页显示的记录数)等,代码可获取或设置位于页索引框右边的文字、获取或设置...
对于几乎所有的数据表现Web应用来说,组织好数据的显示方式、避免给用户带来混乱的感觉就是最主要的目标之一。每个页面显示20条记录当然...将数据分成多个页面显示,即对数据进行分页,是解决此类问题的最常见的办法。
QuickPager是一款专为ASP.NET 2.0平台设计的高效分页控件,它旨在提供一个强大且易于使用的工具,帮助开发者在Web应用程序中实现高效的数据分页展示。这款控件支持多种数据库系统,包括但不限于SQL Server、Oracle、...
总结来说,ASP.NET数据分页通用高效方法主要依赖于存储过程,通过合理的设计和优化,可以有效地处理大数据量的展示,提升系统性能,同时提供良好的用户体验。实践中,开发者应根据项目需求和环境选择最适合的数据...
`asp.net 通用分页类`就是为了解决这个问题而设计的,它允许开发者创建一个可复用的组件,以便在不同的数据展示页面上实现高效且灵活的分页功能。 首先,我们来看`C#`语言是如何实现分页逻辑的。在C#中,可以创建一...
本资源提供了一个基于C#编程语言和ASP.NET框架的通用数据翻页控件源码,它具备了支持多种数据源绑定模式的能力,能够灵活应用于各种Web应用程序中。 首先,我们来看看核心的`Pager.ascx`文件,这是一个用户控件...
在这个“ASP.NET分页实例控件.rar”压缩包中,包含了一个简单的分页功能实现,这对于初学者来说是一个很好的学习资源。 在ASP.NET中,分页是一个常用的功能,它用于处理大量数据的展示,避免一次性加载过多数据导致...
在这个主题中,我们聚焦于"ASP.NET 分页控件",这是一项在处理大量数据时至关重要的功能,能够提高用户界面的响应速度和用户体验。 1. **分页的概念**: 在网页设计中,分页是一种组织大量数据的方式,它将结果集...
ASP.NET分页控件是Web开发中用于处理大量数据并以多页面形式展示的重要工具。在ASP.NET框架中,有多种实现分页的方式,包括服务器端控件如GridView、ListView和DataPager,以及客户端脚本库如jQuery UI或Bootstrap的...
ASP.NET分页控件是网页开发中的重要工具,尤其在处理大量数据时,它能有效提高用户体验,避免一次性加载过多内容导致页面响应慢或者浏览器崩溃。在ASP.NET 2.0版本中,提供了多种实现分页的方法,这些方法通常与数据...
asp.net在快速分页控件。把源码发给大家,以便大家学习,改进。 基于sqlserver 2000存储过程 分页速度快。使用方便 实现了repeater ,datalist ,datagrid,gridview的重载。
修改自AFeng通用分页控件V1.1,分页核心方法全部重写 2.打开方式VS2005 sp1,编程语言C# 2.纯服务器端控件,无须获取页面QueryString 4.集成多种分页方式,通过设置PagingMode与PageJump可看到效果 5.集成每页显示...
【Ajax通用分页源码(ASP.net)】是一款基于ASP.NET技术实现的,利用Ajax无刷新方式实现网页分页功能的代码示例。这个源码集合涵盖了多种编程语言和技术,如C#、ASP.NET和WinForm,同时也涉及到数据库访问层(Data...
"分页控件asp.net"是一个专为.NET框架设计的高效、轻量级的分页解决方案。描述中的“很好用”和“占地小,实用的很”表明这个控件具有易用性和性能优势。 首先,我们来看一下压缩包中的文件名,它们揭示了分页控件...
最近闲来没事,总结了一些asp.net分页经验,为使用方便现在写了一个可以通用的分页控件:AspNetAjaxPager:,使用ajax技术实现无刷新分页,能够控制所有数据绑定控件的分页,自己觉得效果还是挺不错的,现在奉献给大家...
摘要:.NET源码,控件组件,分页控件 URL分页控件,很多参数可以自定义,比如分页样式的显示、分布按钮的样式、总页数(动态,前置条件:总记录数、每页显示的记录数)等,代码可获取或设置位于页索引框右边的文字、...
ASP.NET分页通用组件是一种高效、灵活的工具,旨在提高Web应用程序中数据浏览的用户体验。在大型数据集的展示中,分页尤为重要,因为它允许用户逐步加载和浏览内容,而不是一次性加载所有数据,从而提高页面加载速度...
综上所述,这个项目旨在通过VS2008+C#的组合,开发一个高度可定制、性能优异的ASP.NET分页用户控件,适用于各种Web应用程序的数据展示需求。开发者可以利用提供的源代码和资源来理解和学习如何在自己的项目中实现...