ITPub博客

首页 > 应用开发 > IT综合 > 解决Asp.net中翻页问题的自定义用户控件 (转)

解决Asp.net中翻页问题的自定义用户控件 (转)

原创 IT综合 作者:amyz 时间:2007-10-17 18:50:00 0 删除 编辑
解决Asp.net中翻页问题的自定义用户控件 (转)[@more@]

  不知道为什么,微软既然提供了DataGrid的分页功能,为什么功能那么弱,要么只有上一页、下一页,要么就1、2、3、4、5、6页,根本不符合我们中国软件的“国情”啊。在我的印象里,好像不但要有“首页”、“上页”、“下页”、“末页”,还要有Goto到指定页等等,才算完美啊。不知道大家是否有同感。
  鉴于此,我写了个关于DataGrid的分页功能的一个自定义用户控件,只要DataGrid需要翻页,就把此自定义控件过进来,在简单的Copy一下代码,就OK了。以下是自定义控件的代码。和如何使用它的代码,供大家参考,不妥之处,望批之。

1、自定义用户控件名称为 ChangePage.ascx

1.1、界面段的代码如下

<%@ Control Language="C#" AutoEventWireup="false" Codebehind="ChangePage.ascx.cs" Inherits="Education.web.ChangePage"

TargetSchema="microsoft.com/intellisense/IE5"%'>http://schemas.microsoft.com/intellisense/ie5"%>


 
 
 
<ASP:linkbutton id="btnFirst" runat="server" CssClass="Linkbutton" Text="首页" CommandArgument="0">首页


 前页

 后页

 
 末页
  
 转到:

CssClass="text"> 
   

id="lblCurrentIndex" runat="server">


界面段代码结束

1.2、ChangePage.ascx.cs  CodeBehind代码如下
namespace Education.Web
{
 using System;
 using System.Data;
 using System.Drawing;
 using System.Web;
 using System.Web.UI.WebControls;
 using System.Web.UI.HtmlControls;

 ///


 /// 自定义用户控件,用来显示Grid分页
 ///

 public abstract class ChangePage : System.Web.UI.UserControl
 {
 protected System.Web.UI.WebControls.LinkButton btnFirst;
 protected System.Web.UI.WebControls.LinkButton btnPrev;
 protected System.Web.UI.WebControls.LinkButton btnNext;
 protected System.Web.UI.WebControls.LinkButton btnLast;
 protected System.Web.UI.WebControls.Label lblGoPage;
 protected System.Web.UI.WebControls.TextBox txtGoPage;
 protected System.Web.UI.WebControls.Label lblPage;
 protected System.Web.UI.WebControls.Button btnGo;
 protected System.Web.UI.WebControls.Label lblCurrentIndex;
 //声明翻页事件
 public delegate void PageIndExchangedEventHandler(object sender, System.EventArgs e);
 public event PageIndexChangedEventHandler PageIndexChanged;
 //声明GoTo事件
 public delegate void GoPageEventHandler(object sender, int PageIndex);
 public event GoPageEventHandler GoPage;

 protected virtual void OnPageIndexChanged(object sender,System.EventArgs  e)
 {
 if (PageIndexChanged != null)
 PageIndexChanged(sender, e);
 }

 protected virtual void OnGoPage(object sender,int PageIndex)
 {
 if (GoPage != null)
 GoPage(sender, PageIndex);
 }

 private void Page_Load(object sender, System.EventArgs e)
 { 
 //判断txtGoPage输入的是否为数字
 this.btnGo.Attributes.Add("onclick","return val_num("+this.txtGoPage.ClientID.ToString()+")"); 
 } 
 //设置翻页按钮的Enabled属性
 public void PagerButtonEnable(System.Web.UI.WebControls.DataGrid dgPage)
 {
 btnFirst.Enabled = (dgPage.CurrentPageIndex == 0 ? false : true);
 btnPrev.Enabled  = (dgPage.CurrentPageIndex == 0 ? false : true); 
 btnNext.Enabled = (dgPage.CurrentPageIndex == (dgPage.PageCount - 1) ? false : true);
 btnLast.Enabled = (dgPage.CurrentPageIndex == (dgPage.PageCount - 1) ? false : true); 
 }
 //显示页面信息
 public void ShowStats(System.Web.UI.WebControls.DataGrid dgPage)
 {
 
 lblCurrentIndex.Text = "页码:[ " + ((int)dgPage.CurrentPageIndex+1) + " / "+ dgPage.PageCount + " ]" ; 
 }
 //首页
 private void btnFirst_Click(object sender, System.EventArgs e)
 {
 OnPageIndexChanged( sender , e );
 }
 //上页
 private void btnPrev_Click(object sender, System.EventArgs e)
 {
 OnPageIndexChanged( sender , e );
 }
 //下页
 private void btnNext_Click(object sender, System.EventArgs e)
 {
 OnPageIndexChanged( sender , e );
 }
 //末页
 private void btnLast_Click(object sender, System.EventArgs e)
 {
 OnPageIndexChanged( sender , e );
 } 
 //GoTo到某一页
 private void btnGo_Click(object sender, System.EventArgs e)
 {
 OnGoPage( sender ,Convert.ToInt32(this.txtGoPage.Text) );
 }


 #region Web FoRM Designer generated code
 override protected void OnInit(EventArgs e)
 {
 //
 // CODEGEN: This call is required by the ASP.NET Web Form Designer.
 //
 InitializeComponent();
 base.OnInit(e);
 }
 
 /// Required method for Designer support - do not modify
 /// the contents of this method with the code editor.
 ///
 private void InitializeComponent()
 {
 this.btnFirst.Click += new System.EventHandler(this.btnFirst_Click);
 this.btnPrev.Click += new System.EventHandler(this.btnPrev_Click);
 this.btnNext.Click += new System.EventHandler(this.btnNext_Click);
 this.btnLast.Click += new System.EventHandler(this.btnLast_Click);
 this.btnGo.Click += new System.EventHandler(this.btnGo_Click);
 this.Load += new System.EventHandler(this.Page_Load);

 }
 #endregion
 }
}
ChangePage.ascx.cs  CodeBehind代码结束


2、如何在其他的页面中使用翻页的用户自定义控件

2.1、页面中拖拽的用户自定义控件代码如下

2.2、CodeBehind代码如下

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.sqlClient;
using System.Text;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace Education.Web
{
 ///


 /// 维护页面
 ///

 public class TeachingCenterList : System.Web.UI.Page
 {
 //声明翻页用户控件 注意:名称tcChangePage应该和拖拽过来后的界面中的ChangePage控件的ID相同

 protected ChangePage  tcChangePage; 

 protected System.Web.UI.WebControls.DataGrid MyDataGrid; //要翻页的DataGrid控件的名称

 public void Page_Load(object sender, System.EventArgs e)
 {
 if(!Page.IsPostBack)
 { 
 //网格数据绑定
 BindGrid(); 
 } 
 }
 #region Web Form Designer generated code
 override protected void OnInit(EventArgs e)
 {
 InitializeComponent(); 
 base.OnInit(e);

 //翻页控件中的事件声明 
 tcChangePage.PageIndexChanged +=new ChangePage.PageIndexChangedEventHandler(this.PageButtonClick); //翻页事件
 tcChangePage.GoPage +=new ChangePage.GoPageEventHandler(this.PageGoButtonClick);  //GoTo事件
 } 
 #endregion
 
 /// 网格数据绑定
 void BindGrid()
 { 
 //读取数据库的信息,获得DataView  将DataView绑定到DataGrid上去

 {....} 
 
 //显示页码
 tcChangePage.ShowStats( MyDataGrid );
 //判断翻页按钮Enable状态
 tcChangePage.PagerButtonEnable( MyDataGrid );
 }

 #region 翻页处理 代码的主体部分
 /// 翻页按钮事件处理
 ///
 ///
 ///
 public void PageButtonClick(Object sender,System.EventArgs e)
 {
 //获得LinkButton的参数值
 String arg = ((LinkButton)sender).CommandArgument;

 switch(arg)
 {
 case ("next"): //下页
 if (MyDataGrid.CurrentPageIndex < (MyDataGrid.PageCount - 1))
 MyDataGrid.CurrentPageIndex ++; 
 break;
 case ("prev"): //上页
 if (MyDataGrid.CurrentPageIndex > 0)
 MyDataGrid.CurrentPageIndex --;
 break;
 case ("last"): //末页
 MyDataGrid.CurrentPageIndex = (MyDataGrid.PageCount - 1);
 break;
 default:  //首页 
 MyDataGrid.CurrentPageIndex = 0;
 break;
 }
 //网格数据绑定
 BindGrid();
 //网格数据指定
 MyDataGrid.SelectedIndex = 0 ;
 //指定到网格中第一行,同时将数据显示到明细窗口(显示)
 SelectItemCommand( 0 , "显示");
 }
 ///


 /// 翻页Go按钮处理事件
 ///

 ///
 ///
 public void PageGoButtonClick(Object sender , int PageIndex)
 { 
 //获得Button的参数值
 string arg = ((Button)sender).CommandArgument;
 switch(arg)
 {
 case ("GoPage"): //指定到某一页
 if (PageIndex <= MyDataGrid.PageCount)
 {
 MyDataGrid.CurrentPageIndex = (PageIndex-1);
 }
 else
 {
 MyDataGrid.CurrentPageIndex = (MyDataGrid.PageCount-1);
 }
 break;
 }
 //网格数据绑定
 BindGrid();
 //网格数据指定
 MyDataGrid.SelectedIndex = 0 ;
 //指定到网格中第一行,同时将数据显示到明细窗口(显示)
 SelectItemCommand( 0 , "显示");
 } 
 #endregion
 }
}

代码写了一大堆,看上去挺复杂,其实挺简单的,呵呵,如果觉得是垃圾,请弃之。。。。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752019/viewspace-977278/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    3984
  • 访问量
    7335433