• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
不知道为什么,微软既然提供了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="http://schemas.microsoft.com/intellisense/ie5"%>
<script language="javascript">
<!--
function val_num(field) {
  if (field.value=="")
  {
   alert("错误!\n\n请输入正确数字!");
   field.focus();    
   field.select();
   return false;
  }  
  else if (field.value.indexOf(" ")>=0)
  {
   alert("错误!\n\n请输入正确数字!\n勿包含空格!");
   field.focus();    
   field.select();
   return false;
  }
  else if (isNaN(field.value))
  { 
   alert("错误!\n\n请输入正确数字!");
   field.focus();    
   field.select();
   return false;
  }
  else if (field.value.indexOf(''''.'''')>=0)
  {
   alert("错误!\n\n请输入整数!")
   field.focus();    
   field.select();
   return false;
  }
  else if (parseInt(field.value)<=0)
  {
   alert("错误!\n\n请输入正确数字!");
   field.focus();    
   field.select();
   return false;
  }
  return true;
}
//-->
</script>
<TABLE >首页

</asp:linkbutton><asp:linkbutton

CssClass="text"></asp:textbox>&nbsp;<asp:label ></asp:button>&nbsp;&nbsp;<asp:label

></asp:label></td>
 </tr>
</TABLE>
界面段代码结束

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;

 /// <summary>
 /// 自定义用户控件,用来显示Grid分页
 /// </summary>
 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.
  /// </summary>
  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、页面中拖拽的用户自定义控件代码如下

<uc1:changepage ></uc1:changepage>

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
{
 /// <summary>
 /// 维护页面
 /// </summary>
 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 翻页处理 代码的主体部分
  /// 翻页按钮事件处理
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  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 , "显示");
  }
  /// <summary>
  /// 翻页Go按钮处理事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="PageIndex"></param>
  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
 }
}


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
使用ASP.NETWeb窗体路由发布时间:2022-07-10
下一篇:
ASP.NET动态网站制作(19)--C#(2)发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap