一步一步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的单步调试的过程。欢迎大家继续关注:)多谢 |