电脑基础知识
一步一步SharePoint 2007之二十六:编写一个带事件的WebPart
2025-06-23 19:01  点击:0

摘要

前面的文章中,我们编写了一个非常简单的WebPart,它只能输出一个Hello World!的字符串,

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

很显然,这种WebPart根本就没有什么实际的作用。有没有办法编写比较复杂一些的,比如是带事件的 WebPart呢?

本篇文章将介绍如何编写一个带事件的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.Sample11 {12 public class Time : WebPart, INamingContainer13 {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 Text34 {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 == false) this.AddControls();48 }49 50 protected override void onLoad(EventArgs e)51 {52 base.onLoad(e);53 54 if (this.Page.IsPostBack == true) this.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添加强名称,《一步一步SharePoint 2007之二十六:编写一个带事件的WebPart》()。

这里做一点改变,将编译的输出路径更改为站点的bin目录,如 C:\pub\oot\wss\VirtualDirectories\9001\_app_bin,这样做的目的是为了方便调试。

3、其它步骤,如更改web.config、将WebPart添加到网站的WebParts列表中等,就都省了,请参照前 面的文章中讲解的方法操作。

打开网站首页,将我们刚刚编写的WebPart添加到首页中。看,TextBox中的内容为空。

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

至此,我们要达到的目的就实现了。有了这个简单复合控件的WebPart,大家就可以尝试编写其它一些 复杂的WebPart了,但其基本的实现方法就是这样的。

这篇文章中,为了简单起见,我尝试了不再讲解重复操作的方法,这样可以加快讲解新知识点的速度 。不知道大家能不能适应这种改变呢?如果不能适应,我将改为以前的方法。

在实际应用中,我们常常需要将某些记录的列表显示出来,单击某条记录后,在其它WebPart中显示记 录的详细信息,那么,这样的WebPart能不能做到呢?

下一篇文章我将记录如何编写两个WebPart的联动的过程。

本文配套源码:bianceng/do/201212/780.htm