天天看點

一步一步SharePoint 2007之二十七:編寫兩個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的過程中,有時候出了錯誤,卻又不知道是什麼原因,這時,找到原因的最好辦法是單步調試。

本文轉自 Eallies 51CTO部落格,原文連結:http://blog.51cto.com/eallies/78821,如需轉載請自行聯系原作者