一步一步SharePoint 2007之二十六:编写一个带事件的WebPart

简介:
要实现带事件的WebPart,实际上就是要实现有复合控件的WebPart,这在开发过程中具有非常的的实际意义。如果我们能够做到这点,那么,其它的什么样的WebPart,相信大家都能举一反三的做到。
  这里,我就用一个TextBox,一个Button控件来举例子,要做到的就是单击Button,能将当前系统时间显示在TextBox中。
  至于WebPart的基本操作,前面的文章中讲得很清楚,这里不再一一讲解操作步骤。
  为了方便您的学习,您可以下载本篇文章所创建的工程。 单击此处 下载。

  下面将记录每一步的操作过程。
  1、首先创建一个命名空间为Eallies.WebParts.Sample的C#的Class Library工程,并将默认的Class1.cs改名为Time.cs。然后添加System.Web引用,并将AssemblyInfo.cs按照前面文章中的做法更改好。
  将Time.cs的代码更改为如下代码:
    1  using System;
    2  using System.Collections.Generic;
    3  using System.Text;
    4 
    5  using System.Web.UI;
    6  using System.Web.UI.WebControls;
    7  using System.Web.UI.WebControls.WebParts;
    8  using System.Web.UI.HtmlControls;
    9 
   10  namespace Eallies.WebParts.Sample
   11 {
   12      public  class  Time :  WebPartINamingContainer
   13     {
   14          private  string _Text;
   15 
   16          private  HtmlTableCell _HtmlTableCell =  new  HtmlTableCell();
   17 
   18          private  TextBox _TextBox =  new  TextBox();
   19          private  Button _Button =  new  Button();
   20 
   21          public Time()
   22         {
   23              this._Button.Click +=  delegate( object sender,  EventArgs e)
   24             {
   25                  this._Text =  DateTime.Now.ToString();
   26 
   27                  this._HtmlTableCell.InnerHtml =  "";
   28                  this.AddControls();
   29             };
   30         }
   31 
   32         [ WebBrowsable( true),  Personalizable( true)]
   33          public  string Text
   34         {
   35              get {  return _Text; }
   36              set { _Text =  value; }
   37         }
   38 
   39          protected  override  void CreateChildControls()
   40         {
   41              this.Controls.Add( new  LiteralControl( "<table>" +  "\n"));
   42              this.Controls.Add( new  LiteralControl( "    <tr>" +  "\n"));
   43              this.Controls.Add( this._HtmlTableCell);
   44              this.Controls.Add( new  LiteralControl( "    </tr>" +  "\n"));
   45              this.Controls.Add( new  LiteralControl( "</table>" +  "\n"));
   46 
   47              if ( this.Page.IsPostBack ==  falsethis.AddControls();
   48         }
   49 
   50          protected  override  void OnLoad( EventArgs e)
   51         {
   52              base.OnLoad(e);
   53 
   54              if ( this.Page.IsPostBack ==  truethis.AddControls();
   55         }
   56 
   57          protected  override  void Render( HtmlTextWriter writer)
   58         {
   59              base.Render(writer);
   60         }
   61 
   62          private  void AddControls()
   63         {
   64              this._TextBox.ID =  this.ID +  "TextBox";
   65              this._TextBox.Text =  this._Text;
   66              this._HtmlTableCell.Controls.Add( this._TextBox);
   67 
   68              this._HtmlTableCell.Controls.Add( new  LiteralControl( "<br>"));
   69 
   70              this._Button.ID =  this.ID +  "Button";
   71              this._Button.Text =  "Get Time";
   72              this._HtmlTableCell.Controls.Add( this._Button);
   73         }
   74     }
   75 }


  2、按照前面文章的方法为该WebPart添加强名称。
  这里做一点改变,将编译的输出路径更改为站点的bin目录,如C:\Inetpub\wwwroot\wss\VirtualDirectories\9001\_app_bin,这样做的目的是为了方便调试。


  3、其它步骤,如更改web.config、将WebPart添加到网站的WebParts列表中等,就都省了,请参照前面的文章中讲解的方法操作。
  打开网站首页,将我们刚刚编写的WebPart添加到首页中。看,TextBox中的内容为空。


  4、点击Button,则TextBox中的内容即变为当前时间了。


  至此,我们要达到的目的就实现了。有了这个简单复合控件的WebPart,大家就可以尝试编写其它一些复杂的WebPart了,但其基本的实现方法就是这样的。
  这篇文章中,为了简单起见,我尝试了不再讲解重复操作的方法,这样可以加快讲解新知识点的速度。不知道大家能不能适应这种改变呢?如果不能适应,我将改为以前的方法。
  在实际应用中,我们常常需要将某些记录的列表显示出来,单击某条记录后,在其它WebPart中显示记录的详细信息,那么,这样的WebPart能不能做到呢?







本文转自 Eallies 51CTO博客,原文链接:http://blog.51cto.com/eallies/78823,如需转载请自行联系原作者
目录
相关文章
|
Linux 测试技术 开发工具
Web知识补充
Web知识补充
52 0
Web知识补充
下一篇
无影云桌面