一步一步SharePoint 2007之二十七:编写两个WebPart的联动

摘要
  前面的文章中,我们编写了一个复合控件的WebPart,实现了这个后,大家就可以编写非常复杂的WebPart了。
  在实际应用中,我们常常需要将某些记录的列表显示出来,单击某条记录后,在其它WebPart中显示记录的详细信息,那么,这样的WebPart能不能做到呢?
  本篇文章将介绍如何编写两个WebPart的联动的过程。
正文
  要能实现左边列表,右边详细信息的记录显示方式,我们需要解决两个方面的问题。
  一个是如何实现列表,以及点击某一项后的事件触发;另一个是如何在一个WebPart中访问另外一个WebPart。
  这里,我就用一个列表的WebPart,以及前面我们实现过的Hello World的WebPart来举例子,要做到的就是单击List列表中的某一项,能将该项的内容显示在Hello World控件中。
  至于WebPart的基本操作,前面的文章中讲得很清楚,这里不再一一讲解操作步骤。
  为了方便您的学习,您可以下载本篇文章所创建的工程。单击此处下载。

  下面将记录每一步的操作过程。
  1、首先创建一个命名空间为Eallies.WebParts.Associated的C#的Class Library工程,并将默认的Class1.cs改名为List.cs。然后添加System.Web、System.WebParts.Hello引用,并将AssemblyInfo.cs按照前面文章中的做法更改好。
  将List.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.WebParts;

     7 using System.Web.UI.HtmlControls;

     8

     9 using System.Collections;

    10

    11 using Eallies.WebParts.Hello;

    12

    13 namespace Eallies.WebParts.Associated

    14 {

    15     public class List : WebPart, IPostBackEventHandler

    16      {

    17         private IList _Items = new ArrayList();

    18

    19         private HtmlTableCell _HtmlTableCell = new HtmlTableCell();

    20

    21         public List()

    22          {

    23             this.GetItems();

    24          }

    25

    26         protected override void CreateChildControls()

    27          {

    28             this.Controls.Add(new LiteralControl("<table>" + "\n"));

    29             this.Controls.Add(new LiteralControl("     <tr>" + "\n"));

    30             this.Controls.Add(this._HtmlTableCell);

    31             this.Controls.Add(new LiteralControl("     </tr>" + "\n"));

    32             this.Controls.Add(new LiteralControl("</table>" + "\n"));

    33

    34             if (this.Page.IsPostBack == false) this.AddRows();

    35          }

    36

    37         protected override void OnLoad(EventArgs e)

    38          {

    39             base.OnLoad(e);

    40

    41             if (this.Page.IsPostBack == true) this.AddRows();

    42          }

    43

    44         protected override void Render(HtmlTextWriter writer)

    45          {

    46             base.Render(writer);

    47          }

    48

    49         private void GetItems()

    50          {

    51             this._Items.Add("Row 1");

    52             this._Items.Add("Row 2");

    53             this._Items.Add("Row 3");

    54             this._Items.Add("Row 4");

    55             this._Items.Add("Row 5");

    56          }

    57

    58         private void AddRows()

    59          {

    60             for (int i = 0; i < _Items.Count; i++)

    61              {

    62                 this._HtmlTableCell.Controls.Add(new LiteralControl("<table>" + "\n"));

    63                 this._HtmlTableCell.Controls.Add(new LiteralControl("     <tr>" + "\n"));

    64                 this._HtmlTableCell.Controls.Add(new LiteralControl("         <td style=\"cursor:hand\" onclick=\"" + this.Page.ClientScript.GetPostBackEventReference(this, this._Items[i].ToString()) + "\">" + this._Items[i].ToString() + "</td>" + "\n"));

    65                 this._HtmlTableCell.Controls.Add(new LiteralControl("     </tr>" + "\n"));

    66                 this._HtmlTableCell.Controls.Add(new LiteralControl("</table>" + "\n"));

    67              }

    68          }

    69

    70          #region IPostBackEventHandler Members

    71

    72         public void RaisePostBackEvent(string eventArgument)

    73          {

    74             for (int i = 0; i < WebPartManager.WebParts.Count; i++)

    75              {

    76                 if (WebPartManager.WebParts[i].Title == "Instance")

    77                  {

    78                     Instance instance = (Instance)WebPartManager.WebParts[i];

    79                      instance.Text = eventArgument;

    80                  }

    81              }

    82          }

    83

    84          #endregion

    85      }

    86 }

请单击查看原始尺寸的图片。

  2、其它步骤,如添加强名称、更改web.config、将WebPart添加到网站的WebParts列表中等,就都省了,请参照前面的文章中讲解的方法操作。
  打开网站首页,将我们刚刚编写的WebPart添加到首页中。看,List列表中有五项值,Instance中的内容为Hello World!。
请单击查看原始尺寸的图片。

  3、点击List列表中的某一项,如第二项,则Instance中的内容即变为Row 2了。
请单击查看原始尺寸的图片。

  至此,我们已经实现了两个WebPart的联动,这样的话,最常见的左边列表、右边详细信息的记录显示方法就成为现实了。
  在编写WebPart的过程中,有时候出了错误,却又不知道是什么原因,这时,找到原因的最好办法是单步调试。
  下一篇文章我将记录如何实现WebPart的单步调试的过程。欢迎大家继续关注:)多谢

posted on 2007-10-24 10:55  执法长老  阅读(185)  评论(0编辑  收藏  举报

导航