要能實作左邊清單,右邊詳細資訊的記錄顯示方式,我們需要解決兩個方面的問題。
一個是如何實作清單,以及點選某一項後的事件觸發;另一個是如何在一個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,如需轉載請自行聯系原作者