huangkun
喜欢写程序吗?那就来吧,为软件的崛起而努力吧!!

导航

 
/*
 * 要求属性:
 * 1、记录总数
 * 2、每页显示记录数
 * 3、当前页数
 *
 *该数据导行样的功能:
 *1、要求提供记录总数,记录数,当前页数的功能
 *2、要求提供上一页,下一页,首页,尾页的导行按钮,并要给出导行事件
 *3、要求根据当前页来显示导行按钮的显示状态。
 *4、要求客户只输入属性一次,以后要求系统自动维护各属性的变化。
 *5、要求控件对属性的序列化
 * */
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace CustomerTest
{
 public delegate void DataBarClick(object e,int number);
 /// <summary>
 /// Summary description for DataBar.
 /// </summary>
 [DefaultProperty("TotalRecord"),
 ToolboxData("<{0}:DataBar NumberPerPage=20 TotalRecord=0 CurrentPage=1 runat=server></{0}:DataBar>")]
 public class DataBar : System.Web.UI.WebControls.WebControl,INamingContainer
 {
  protected System.Web.UI.WebControls.LinkButton LinkButtonPreview;
  protected System.Web.UI.WebControls.LinkButton LinkButtonNext;
  protected System.Web.UI.WebControls.LinkButton LinkButtonLast;
  protected System.Web.UI.WebControls.LinkButton LinkButtonFirst;
  private bool m_Design=true;
  
  protected int m_TotalRecord;//总记录数
  protected int m_CurrentPage=1;//当前显示的页号
  protected int m_NumberPerPage;//每页显示记录数

  //建立寻行数据页数的事件
  public event DataBarClick databarClick;
  /// <summary>
  /// Get或Set数据的总记录数
  /// </summary>
  [Bindable(true),
  Category("Data"),
  DefaultValue(0)]
  public int TotalRecord
  {
   get
   {
    return this.m_TotalRecord ;
   }
   set
   {
    if(value<0)
     throw new Exception("给出的总记录数不能少于0");
    this.m_TotalRecord=value;
   }
  }
  /// <summary>
  /// Get或Set当前显示的页号
  /// </summary>
  [Bindable(true),
  Category("Data"),
  DefaultValue(1)]
  public int CurrentPage
  {
   get
   {
    return this.m_CurrentPage;
   }
   set
   {
    if(value<1)
     throw new Exception("给出的当前页不能少于1");
    this.m_CurrentPage = value;
   }
  }
  /// <summary>
  /// Get或Set每页显示记录数
  /// </summary>
  [Bindable(true),
  Category("Data"),
  DefaultValue(20)]
  public int NumberPerPage
  {
   get
   {
    return this.m_NumberPerPage;
   }
   set
   {
    if(value<1)
     throw new Exception("每页显示的记录数不能少于1");
    this.m_NumberPerPage = value;
   }
  }
  protected override void CreateChildControls()
  {
   Table l_table=new Table();//建立外层的Table
   TableRow l_tbrow=new TableRow();//只有一行
   l_table.Rows.Add(l_tbrow);

   TableCell l_tbcell=new TableCell();//建立第一个列的内容
   l_tbrow.Controls.Add(l_tbcell);
   l_tbcell.Wrap=false;
  
   LinkButtonFirst =new System.Web.UI.WebControls.LinkButton();
   LinkButtonFirst.ID="LinkButtonFirst";
   LinkButtonFirst.Text="首页";
   LinkButtonFirst.Click+=new EventHandler(Guid_Click);
   l_tbcell.Controls.Add(LinkButtonFirst);
   l_tbcell=new TableCell();//建立"|"
   l_tbrow.Controls.Add(l_tbcell);
   l_tbcell.Text=" | ";

   l_tbcell=new TableCell();//建立第二个列的内容
   l_tbrow.Controls.Add(l_tbcell);
   l_tbcell.Wrap=false;
  
   LinkButtonPreview =new System.Web.UI.WebControls.LinkButton();
   LinkButtonPreview.ID="LinkButtonPreview";
   LinkButtonPreview.Text="上一页";
   LinkButtonPreview.Click+=new EventHandler(Guid_Click);
   l_tbcell.Controls.Add(LinkButtonPreview);
   l_tbcell=new TableCell();//建立"|"
   l_tbrow.Controls.Add(l_tbcell);
   l_tbcell.Text=" | ";
   l_tbcell=new TableCell();//建立第三个列的内容
   l_tbrow.Controls.Add(l_tbcell);
   l_tbcell.Wrap=false;
  
   LinkButtonNext =new System.Web.UI.WebControls.LinkButton();
   LinkButtonNext.ID="LinkButtonNext";
   LinkButtonNext.Text="下一页";
   LinkButtonNext.Click+=new EventHandler(Guid_Click);
   l_tbcell.Controls.Add(LinkButtonNext);

   l_tbcell=new TableCell();//建立"|"
   l_tbrow.Controls.Add(l_tbcell);
   l_tbcell.Text=" | ";

   l_tbcell=new TableCell();//建立第四个列的内容
   l_tbrow.Controls.Add(l_tbcell);
   l_tbcell.Wrap=false;
  
   LinkButtonLast =new System.Web.UI.WebControls.LinkButton();
   LinkButtonLast.ID="LinkButtonLast";
   LinkButtonLast.Text="尾页";
   LinkButtonLast.Click+=new EventHandler(Guid_Click);
   l_tbcell.Controls.Add(LinkButtonLast);
   this.Controls.Add(l_table);
  
   base.CreateChildControls ();
  }

  private void Guid_Click(object sender, System.EventArgs e)
  {
   setGuide(sender);
   if(this.databarClick!=null)
   {
    this.databarClick(this,this.m_CurrentPage);
   }
  }
  /// <summary>
  /// 用于激发databarClick事件
  /// </summary>
  public void OndatabarClick()
  {
   if(this.databarClick!=null)
   {
    this.databarClick(this,this.m_CurrentPage);
   }
  }
  /// <summary>
  /// 这是用来显示导行栏中每个元素的状态
  /// </summary>
  /// <param name="sender">表示是按的那一个导行栏元素的按钮,如果不是由导行栏触发,则传null值</param>
  private void setGuide(object sender)
  {
   int m_iTotalPage = Convert.ToInt32(System.Math.Ceiling(Convert.ToDouble(this.m_TotalRecord)/Convert.ToDouble(m_NumberPerPage)));
   if(m_iTotalPage<this.m_CurrentPage)
    this.m_CurrentPage=1;
   if(sender!=null)
   {
    if(((Control)sender).ID=="LinkButtonFirst")
    {
     this.m_CurrentPage=1;
    }
    if(((Control)sender).ID=="LinkButtonNext")
    {
     this.m_CurrentPage=this.m_CurrentPage+1;
    }
    if(((Control)sender).ID=="LinkButtonPreview")
    {
     this.m_CurrentPage=this.m_CurrentPage-1;
    }
    if(((Control)sender).ID=="LinkButtonLast")
    {
     this.m_CurrentPage=m_iTotalPage;
    }
   }
   this.LinkButtonFirst.Enabled=!(this.m_CurrentPage==1);
   this.LinkButtonPreview.Enabled=!(this.m_CurrentPage==1);
   this.LinkButtonLast.Enabled=!(this.m_CurrentPage==m_iTotalPage);
   this.LinkButtonNext.Enabled=!(this.m_CurrentPage==m_iTotalPage);
  }
 
  protected override void OnLoad(EventArgs e)
  {
   this.m_Design=false;
   base.OnLoad (e);
  }
 
  protected override void Render(HtmlTextWriter writer)
  {
   if(this.m_Design)
    writer.Write("数据导行栏控件");
   base.Render (writer);
  }
 
  protected override void LoadViewState(object savedState)
  {
   base.LoadViewState (savedState);
   /*
    * 在这里用于变量的反序列化,即从ViewState中取回
    * 变量的值。
    * */
   this.m_CurrentPage=(int)this.ViewState["CurrentPage"];
   this.m_NumberPerPage=(int)this.ViewState["NumberPerPage"];
   this.m_TotalRecord=(int)this.ViewState["TotalRecord"];
  }
 
  protected override object SaveViewState()
  {
   /*
    *这里用于把变量序列化,以使PostBack时进行恢复。
    * */
   this.ViewState["CurrentPage"]=this.m_CurrentPage;
   this.ViewState["NumberPerPage"]=this.m_NumberPerPage;
   this.ViewState["TotalRecord"]=this.m_TotalRecord;
   return base.SaveViewState ();
  }
 
  protected override void OnPreRender(EventArgs e)
  {
   this.setGuide(null);
   base.OnPreRender (e);
  }
 }
}

//**********************************************************************************

posted on 2006-07-14 13:40  鬼迷心窍  阅读(324)  评论(0)    收藏  举报