5-8万年薪顶级嵌入式,京沪深就业地 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

web自定义控件(超高技术问题,进来看看能说得不少)

楼主ivan973(湘平)2006-10-09 21:59:03 在 .NET技术 / ASP.NET 提问

程序如下:  
   
  using   System;  
  using   System.Collections.Generic;  
  using   System.ComponentModel;  
  using   System.Text;  
  using   System.Web;  
  using   System.Web.UI;  
  using   System.Web.UI.WebControls;  
  using   System.Data;  
   
  namespace   GoldSoft.OA.UIControl.FenYe  
  {  
          [DefaultProperty("Test")]  
          [ToolboxData("<{0}:DataGridFenYe   runat=server></{0}:DataGridFenYe>")]  
          public   class   DataGridFenYe   :   System.Web.UI.WebControls.DataGrid  
          {  
                  private   Panel   FenYeQuYu   =   new   Panel();  
                  private   Label   PagerCounts   =   new   Label();  
                  private   Label   PageIndex   =   new   Label();  
                  private   Label   Total   =   new   Label();  
                  private   LinkButton   LbZuiQianYe   =   new   LinkButton();  
                  private   LinkButton   LbShangYiYe   =   new   LinkButton();  
                  private   LinkButton   LbXiaYiYe   =   new   LinkButton();  
                  private   LinkButton   LbZuiHouYe   =   new   LinkButton();  
                  private   ImageButton   FirstPage   =   new   ImageButton();  
                  private   ImageButton   UpperPage   =   new   ImageButton();  
                  private   ImageButton   LastPage   =   new   ImageButton();  
                  private   ImageButton   NextPage   =   new   ImageButton();  
                  private   string   firstPageImage;  
                  private   string   upperPageImage;  
                  private   string   lastPageImage;  
                  private   string   nextPageIamge;  
                  private   DropDownList   ddl   =   new   DropDownList();  
                  private   ButtonSortEnum   buttonSort;  
                  protected   static   DataTable   _dataSource   =   new   DataTable();  
   
   
                  #region   构造器  
                  public   DataGridFenYe()  
                  {  
                          //_dataSource   =   null;  
                          this.AllowPaging   =   true;  
                          this.AutoGenerateColumns   =   false;  
                          this.firstPageImage   =   "Image/first.gif";  
                          this.upperPageImage   =   "Image/upper.gif";  
                          this.lastPageImage   =   "Image/last.gif";  
                          this.nextPageIamge   =   "Image/next.gif";  
                          this.ddl.AutoPostBack   =   true;  
                          this.PagerCounts.Font.Size   =   new   FontUnit(9);  
                          this.PageIndex.Font.Size   =   new   FontUnit(9);  
                          this.Total.Font.Size   =   new   FontUnit(9);  
                          this.LbZuiQianYe.Text   =   "最前页";  
                          this.LbZuiQianYe.Font.Size   =   new   FontUnit(9);  
                          this.LbZuiQianYe.Enabled   =   true;  
                          this.LbShangYiYe.Text   =   "上一页";  
                          this.LbShangYiYe.Font.Size   =   new   FontUnit(9);  
                          this.LbXiaYiYe.Text   =   "下一页";  
                          this.LbXiaYiYe.Font.Size   =   new   FontUnit(9);  
                          this.LbZuiHouYe.Text   =   "最后页";  
                          this.LbZuiHouYe.Font.Size   =   new   FontUnit(9);  
                          switch   (this.ButtonSort)   //判断选择导航按扭类型  
                          {  
                                  case   ButtonSortEnum.LinkButton://用LinkButton导型,即“第一页“,“下一页“之类的  
                                          this.PagerStyle.Visible   =   false;  
                                        //把LinkButton加入FenYeQuYu容器中  
                                          this.FenYeQuYu.Controls.Add(PageIndex);  
                                          this.FenYeQuYu.Controls.Add(PagerCounts);  
                                          this.FenYeQuYu.Controls.Add(Total);  
                                          this.FenYeQuYu.Controls.Add(LbZuiQianYe);  
                                          this.FenYeQuYu.Controls.Add(LbShangYiYe);  
                                          this.FenYeQuYu.Controls.Add(LbXiaYiYe);  
                                          this.FenYeQuYu.Controls.Add(LbZuiHouYe);  
                                          break;  
                                  case   ButtonSortEnum.Number://数子导航此处是开启了datagrid自带的DataGrid数字导航功能  
                                          this.AllowPaging   =   true;  
                                          this.ShowFooter   =   true;  
                                          this.PagerStyle.Visible   =   true;  
                                          this.PagerStyle.Mode   =   PagerMode.NumericPages;  
                                          break;  
                                  case   ButtonSortEnum.ImageButton://图片按扭导航  
                                          this.PagerStyle.Visible   =   false;  
                                          //把图片按钮加入FenYeQuYu容器中  
                                          this.FenYeQuYu.Controls.Add(PageIndex);  
                                          this.FenYeQuYu.Controls.Add(PagerCounts);  
                                          this.FenYeQuYu.Controls.Add(Total);  
                                          this.FenYeQuYu.Controls.Add(FirstPage);  
                                          this.FenYeQuYu.Controls.Add(NextPage);  
                                          this.FenYeQuYu.Controls.Add(UpperPage);  
                                          this.FenYeQuYu.Controls.Add(LastPage);  
                                          break;  
   
                          }  
                          this.FenYeQuYu.Controls.Add(ddl);  
                          this.ItemCreated   +=   new   DataGridItemEventHandler(DataGrid_ItemCreated);  
   
                  } 问题点数:50、回复次数:5Top

1 楼ivan973(湘平)回复于 2006-10-09 21:59:34 得分 0

#endregion  
                  #region   属 性  
   
                  ///   <summary>  
                  ///   获取或者设置数据源  
                  ///   </summary>  
                  [Bindable(true),  
                  Category("Appearance"),  
                  Browsable(false),  
                  Description("数据源")]  
                  public   DataTable   _DataSource  
                  {  
                          get  
                          {  
                                  return   _dataSource;  
                          }  
                          set  
                          {  
                                  _dataSource   =   value;  
                          }  
                  }  
   
                  ///   获取或者设置第一页图片按钮对应的图片路径  
                  ///   </summary>  
                  [Bindable(true),  
                  Category("Appearance"),  
                  DefaultValue("Image/first.gif"),  
                  Description("第一页图片按钮对应的图片路径")]  
                  public   string   FirstPageImage  
                  {  
                          get  
                          {  
                                  return   firstPageImage;  
                          }  
                          set  
                          {  
                                  firstPageImage   =   value;  
                          }  
                  }  
   
                  ///   <summary>  
                  ///   获取或者设置上一页图片按钮对应的图片路径  
                  ///   </summary>  
                  [Bindable(true),  
                  Category("Appearance"),  
                DefaultValue("Image/upper.gif"),  
                  Description("上一页图片按钮对应的图片路径")]  
                  public   string   UpperPageImage  
                  {  
                          get  
                          {  
                                  return   upperPageImage;  
                          }  
                          set  
                          {  
                                  upperPageImage   =   value;  
                          }  
   
                  }  
                  ///   <summary>  
                  ///   获取或者设置最后一页图片按钮对应的图片路径  
                  ///   </summary>  
                  [Bindable(true),  
                  Category("Appearance"),  
                DefaultValue("Image/last.gif"),  
                  Description("最后一页图片按钮对应的图片路径")]  
                  public   string   LastPageImage  
                  {  
                          get  
                          {  
                                  return   lastPageImage;  
                          }  
                          set  
                          {  
                                  lastPageImage   =   value;  
                          }  
                  }  
                  ///   <summary>  
                  ///   获取或者设置下一页图片按钮对应的图片路径  
                  ///   </summary>  
                  [Bindable(true),  
                  Category("Appearance"),  
                  DefaultValue("Image/next.gif"),  
                  Description("下一页图片按钮对应的图片路径")]  
                  public   string   NextPageIamge  
                  {  
                          get  
                          {  
                                  return   nextPageIamge;  
                          }  
                          set  
                          {  
                                  nextPageIamge   =   value;  
                          }  
                  }  
                  ///   <summary>  
                  ///   获取或者设置分页按钮的类型  
                  ///   </summary>  
                  [Bindable(true),  
                  Category("Appearance"),  
                DefaultValue("ImageButton"),  
                  Description("获取或者设置分页按钮的类型")]  
                  public   ButtonSortEnum   ButtonSort  
                  {  
                          get  
                          {  
                                  return   this.buttonSort;  
                          }  
                          set  
                          {  
                                  this.buttonSort   =   value;  
                          }  
                           
                  }  
                  #endregion  
   
                  #region   方 法  
                  public   void   BindData()  
                  {  
                          this.DataSource   =   _DataSource;  
                          this.DataBind();  
                          int   TotalNum   =   this._DataSource.Rows.Count;  
                          int   PageNum   =   TotalNum   /   this.PageSize;  
                          if   (TotalNum   %   this.PageSize   >   0)  
                          {  
                                  PageNum++;  
                          }  
                          PageIndex.Text   =   "当前为第:"   +   Convert.ToString(this.CurrentPageIndex   +   1)   +   "页/";  
                          PagerCounts.Text   =   "共有"   +   PageNum.ToString()   +   "页/";  
                          Total.Text   =   "共有   "   +   TotalNum.ToString()   +   "条记录";  
                          ddl.Items.Clear();  
                          for   (int   i   =   1;   i   <=   PageNum;   i++)  
                          {  
                                  ddl.Items.Add(new   ListItem("第"   +   i.ToString()   +   "页",   i.ToString()));  
                          }  
                          ddl.SelectedIndex   =   this.CurrentPageIndex;  
                  }  
                  #endregionTop

2 楼ivan973(湘平)回复于 2006-10-09 22:00:12 得分 0

#region   DDl事件  
   
                  ///   <summary>  
                  ///   转到指定页数事件  
                  ///   </summary>  
                  ///   <param   name="output"></param>  
                  private   void   ddlSelectPage_SelectedIndexChanged(object   sender,   System.EventArgs   e)  
                  {  
                          int   NoPage   =   Convert.ToInt32(ddl.SelectedItem.Value);  
                          this.CurrentPageIndex   =   NoPage   -   1;  
                          BindData();  
                  }  
                  #endregion  
   
                  protected   void   DataGrid_ItemCreated(object   sender,   DataGridItemEventArgs   e)  
                  {  
                          //下面语句是在datagrid最下面加一行,把导航控件封装到DataGrid里去同事为导般控件加入委托事件  
                          if   (e.Item.ItemType   ==   ListItemType.Pager)  
                          {  
                                  TableCell   tc   =   (TableCell)e.Item.Cells[0];  
                                  tc.Controls.Clear();  
                                  tc.Controls.Add(this.FenYeQuYu);  
                                  tc.HorizontalAlign   =   HorizontalAlign.Right;  
                                  tc.VerticalAlign   =   VerticalAlign.Middle;  
                                  if   (this.ButtonSort   ==   ButtonSortEnum.LinkButton)  
                                  {  
                                           
                                          LinkButton   lbFirst   =   (LinkButton)tc.Controls[0].Controls[3];//第一页事件委托  
                                          lbFirst.Click   +=   new   EventHandler(lbFirst_Click);  
                                          LinkButton   lbUpperPage   =   (LinkButton)tc.Controls[0].Controls[4];//上一页事件委托  
                                          lbUpperPage.Click   +=   new   EventHandler(lbUpperPage_Click);  
                                          LinkButton   lbNext   =   (LinkButton)tc.Controls[0].Controls[5];//下一页事件委托  
                                          lbNext.Click   +=   new   EventHandler(lbNextPage_Click);  
                                          LinkButton   lbLast   =   (LinkButton)tc.Controls[0].Controls[6];//最后一页事件委托  
                                          lbLast.Click   +=   new   EventHandler(lbLastPage_Click);  
                                          DropDownList   ddlSelectPage   =   (DropDownList)tc.Controls[0].Controls[7];  
   
                                  }  
                                  if   (this.buttonSort   ==   ButtonSortEnum.ImageButton)  
                                  {  
   
                                          ImageButton   imbtnFirstPage   =   (ImageButton)tc.Controls[0].Controls[3];  
                                          imbtnFirstPage.Click   +=   new   ImageClickEventHandler(imbtnFirstPage_Click);  
   
                                          ImageButton   imbtnNextPage   =   (ImageButton)   tc.Controls[0].Controls[4];  
                                          imbtnNextPage.Click   +=   new   ImageClickEventHandler(imbtnNextPage_Click);  
   
                                          ImageButton   imbtnUpper   =   (ImageButton)tc.Controls[0].Controls[5];  
                                          imbtnUpper.Click   +=   new   ImageClickEventHandler(imbtnUpperPage_Click);  
   
                                          ImageButton   imbtnLastPage   =   (ImageButton)tc.Controls[0].Controls[6];  
                                          imbtnLastPage.Click   +=   new   ImageClickEventHandler(imbtnLastPage_Click);  
                                  }  
                                  ddl.SelectedIndexChanged   +=   new   EventHandler(ddlSelectPage_SelectedIndexChanged);  
                          }  
                  }  
   
                  #region   LinkButton   事 件  
                  ///   <summary>  
                  ///   "第一页"事件  
                  ///   </summary>  
                  ///   <param   name="sender"></param>  
                  ///   <param   name="e"></param>  
                  private   void   lbFirst_Click(object   sender,   EventArgs   e)  
                  {  
                          this.CurrentPageIndex   =   0;   //到第一页  
                          BindData();  
                  }  
                  ///   <summary>  
                  ///   "上一页"事件  
                  ///   </summary>  
                  ///   <param   name="sender"></param>  
                  ///   <param   name="e"></param>  
                  private   void   lbUpperPage_Click(object   sender,   EventArgs   e)  
                  {  
                          if   (this.CurrentPageIndex   >   0)   //上一页  
                          {  
                                  this.CurrentPageIndex   =   this.CurrentPageIndex   -   1;  
                                  BindData();  
                                   
                          }  
                         
                  }  
                  ///   <summary>  
                  ///   "下一页"事件  
                  ///   </summary>  
                  ///   <param   name="sender"></param>  
                  ///   <param   name="e"></param>  
                  private   void   lbNextPage_Click(object   sender,   EventArgs   e)  
                  {  
                          if   (this.CurrentPageIndex   <   this.PageCount   -   1)   //下一页  
                          {  
                                  this.CurrentPageIndex   =   this.CurrentPageIndex   +   1;  
                                  BindData();  
                                   
                          }  
                           
                  }  
                  ///   <summary>  
                  ///   "最后一页"事件  
                  ///   </summary>  
                  ///   <param   name="sender"></param>  
                  ///   <param   name="e"></param>  
                  private   void   lbLastPage_Click(object   sender,   EventArgs   e)  
                  {  
                          this.CurrentPageIndex   =   this.PageCount   -   1;   //最后页  
                          BindData();  
                  }  
                  #endregion  
   
                  #region   ImageButton事件  
                  ///   <summary>  
                  ///   "第一页"事件  
                  ///   </summary>  
                  ///   <param   name="sender"></param>  
                  ///   <param   name="e"></param>  
                  private   void   imbtnFirstPage_Click(object   sender,   ImageClickEventArgs   e)  
                  {  
                          this.CurrentPageIndex   =   0;  
                          BindData();  
                  }  
   
                  ///   <summary>  
                  ///   "下一页"事件  
                  ///   </summary>  
                  ///   <param   name="sender"></param>  
                  ///   <param   name="e"></param>  
                  private   void   imbtnNextPage_Click(object   sender,   ImageClickEventArgs   e)  
                  {  
                          if   (this.CurrentPageIndex   <   this.PageCount   -   1)  
                          {  
                                  this.CurrentPageIndex   =   this.CurrentPageIndex   +   1;  
                                  BindData();  
                          }  
                  }  
   
                  ///   <summary>  
                  ///   "最后一页"事件  
                  ///   </summary>  
                  ///   <param   name="sender"></param>  
                  ///   <param   name="e"></param>  
                  private   void   imbtnLastPage_Click(object   sender,   ImageClickEventArgs   e)  
                  {  
   
                          this.CurrentPageIndex   =   this.PageCount   -   1;  
                          BindData();  
                  }  
   
                  ///   <summary>  
                  ///   "上一页"事件  
                  ///   </summary>  
                  ///   <param   name="sender"></param>  
                  ///   <param   name="e"></param>  
                  private   void   imbtnUpperPage_Click(object   sender,   ImageClickEventArgs   e)  
                  {  
                          if   (this.CurrentPageIndex   >   0)  
                          {  
                                  this.CurrentPageIndex   =   this.CurrentPageIndex   -   1;  
                                  BindData();  
                          }  
                  }  
                  #endregion  
   
                  #region   呈 现  
                  protected   override   void   Render(HtmlTextWriter   writer)  
                  {  
                          //this.RenderContents(writer);  
                          base.Render(writer);  
                          try  
                          {  
                              this.FenYeQuYu.RenderControl(writer);  
                            }  
                          catch   {   }  
            }  
                  #endregion  
   
          }  
          public   enum   ButtonSortEnum  
          {  
                  ImageButton   =   0,  
                  LinkButton   =   1,  
                  Number   =   2  
          }  
   
  }Top

3 楼ivan973(湘平)回复于 2006-10-09 22:00:38 得分 0

控件要求的功能是:   将数据源邦定到此控件,可以用导航按扭实现上一页,下一页(即分页)。并且控件的导航按钮可以是图片(ImageButton),文字式(LinkButton),数子式  
  整个控件设计思路是:继承DataGrid控件,然后加入导航所需按钮(ImageButton,LinkButton)把这此按钮加入FenYeQuYu容器中,然后再在继承的DataGrid控件最后面加入一类行为TableCell   的一行,再把  
  FenYeQuYu中的控件加入这一行中.并为之产生委托事件.  
   
   
  现在控件出现的问题是:1:如果在构造成函数中没给_dataSource   赋初值时,把控件托放到页面并为之添加邦定字段后,为报“创建控件出错",但如你到HTML里把该控件的__DataSource=""标记去掉,控件又恢复正常,并能邦定数据显示。  
                                              2:在显于数据后,点击导航按钮,页数是按二增减。即当前页为“第一页”时,按“下一页”,就跳到第三页去了。我跟踪了一下发现,当点击导航按钮时里面的所友代码都被值行了两次.不知为什么  
                                              3:在设置自定义属性ButtonSort即导航按钮类型时,属性没启做用,控件总是获取枚举类弄第一个值,属性设置不起做用.并且ImageButton得不到图片属性  
   
   
   
   
  内容是有点多,但看明白了其实很简单的   希望哪位好心人能帮帮我,不胜感激。如哪位有更好的分页控件(导航按钮和DataGrid是一个整体邦在一起的那种),拿出来分享一下,小弟在这里先谢了.苦苦等待中……………………………………………………………………Top

4 楼xuwei(夕阳西下,断肠人在天涯)回复于 2006-10-09 22:01:14 得分 0

你就不能说说重点,  
  一大堆代码贴出来,  
  头都昏了!Top

5 楼ivan973(湘平)回复于 2006-10-10 09:45:27 得分 0

重点说了啊  
  控件要求的功能是:   将数据源邦定到此控件,可以用导航按扭实现上一页,下一页(即分页)。并且控件的导航按钮可以是图片(ImageButton),文字式(LinkButton),数子式  
  整个控件设计思路是:继承DataGrid控件,然后加入导航所需按钮(ImageButton,LinkButton)把这此按钮加入FenYeQuYu容器中,然后再在继承的DataGrid控件最后面加入一类行为TableCell   的一行,再把  
  FenYeQuYu中的控件加入这一行中.并为之产生委托事件.  
   
   
  现在控件出现的问题是:1:如果在构造成函数中没给_dataSource   赋初值时,把控件托放到页面并为之添加邦定字段后,为报“创建控件出错",但如你到HTML里把该控件的__DataSource=""标记去掉,控件又恢复正常,并能邦定数据显示。  
                                              2:在显于数据后,点击导航按钮,页数是按二增减。即当前页为“第一页”时,按“下一页”,就跳到第三页去了。我跟踪了一下发现,当点击导航按钮时里面的所友代码都被值行了两次.不知为什么  
                                              3:在设置自定义属性ButtonSort即导航按钮类型时,属性没启做用,控件总是获取枚举类弄第一个值,属性设置不起做用.并且ImageButton得不到图片属性  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:ivan973

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
x 提问