1、創建SharePoint解決方案,添加兩個WebPart分別用來發送和接收;
2、發送值的WebPart需要繼承自IWebPartField(當然,根據需要還可以選擇IWebPartField,IWebPartParameters,IWebPartRow,IWebPartTable,具體參見msdn),原理是將需要發送的值,放到一個接口實例里;
public class SendWebPart : WebPart, IWebPartField
詳細代碼:
1 private TextBox tb; 2 private Button btn; 3 4 protected override void CreateChildControls() 5 { 6 tb = new TextBox(); 7 Controls.Add(tb); 8 btn = new Button(); 9 btn.Text = "Send"; 10 Controls.Add(btn); 11 } 12 //創建一個接口實例 13 [ConnectionProvider("Send", AllowsMultipleConnections = true)] 14 public IWebPartField SendObject() 15 { 16 EnsureChildControls(); 17 return this; 18 } 19 20 //將數據callback到接口實例 21 public void GetFieldValue(FieldCallback callback) 22 { 23 EnsureChildControls(); 24 callback(tb.Text); 25 } 26 // Schema 屬性返回 PropertyDescriptor 對象所封裝的數據字段的架構信息 27 public System.ComponentModel.PropertyDescriptor Schema 28 { 29 get { return null; } 30 }
3、接受數據的WebPart,原理就是在render之前去共享的接口實例中獲取值,然后使用;
1 private Label lbl; 2 private IWebPartField provider; 3 4 protected override void CreateChildControls() 5 { 6 lbl = new Label(); 7 Controls.Add(lbl); 8 } 9 //檢索接口實例 10 [ConnectionConsumer("GetObject")] 11 public void RecvObject(IWebPartField prov) 12 { 13 provider = prov; 14 } 15 //獲取接口實例中的數據 16 private void GetData(object fieldValue) 17 { 18 lbl.Text = Convert.ToString(fieldValue); 19 } 20 //在Render前去接口實例獲取值 21 protected override void OnPreRender(EventArgs e) 22 { 23 if (provider != null) 24 provider.GetFieldValue(new FieldCallback(GetData)); 25 base.OnPreRender(e); 26 }
4、部署WebPart,然后連接,如下圖:
5、查看效果
點擊Send前,只能看到頁面上的兩個webpart,如下圖:
在TextBox中輸入值,點擊Send,刷新頁面,TextBox中的值已經從SendWebPart中發送到ReceiveWebPart中了,兩個自定義WebPart連接成功!
總 結
在完成了兩個自定義WebPart連接以后,自己還想過連接SharePoint自帶的WebPart,但是由於時間關系,還沒有發現如何連接,有成功的希望可以給我留言~~~謝謝~~
備 注
此接口旨在用於 Web 部件連接。在 Web 部件連接中,位於 WebPartZoneBase 區域中的兩個服務器控件建立一個連接並共享數據,其中一個控件充當使用者,另一個控件充當提供者。Web 部件連接中共享數據的機制是接口實例,提供者通過使用回調方法將其提供給使用者。若要建立連接,使用者和提供者必須同時使用同一接口類型共享數據。如果使用者無法識別由提供者發送的接口類型,還可以通過使用轉換器(WebPartTransformer 對象)連接控件,轉換器可將提供者發送的接口實例轉換為使用者可以識別的類型。有關連接的詳細信息,請參見 WebPartConnection 和 Web 部件連接概述。
IWebPartField 接口是 Web 部件控件集中所包含的一個提供者接口,用作基於數據字段創建連接的標准接口。您也可以創建自定義接口以用於 Web 部件連接,但在由數據驅動的許多 Web 應用程序中,使用 IWebPartField 接口基於數據源中的公共行(有關詳細信息,請參見 IWebPartRow 接口)、表(有關詳細信息,請參見 IWebPartTable 接口)或字段創建連接是很有用的。在典型連接中,充當提供者的 WebPart 控件將實現 IWebPartField 接口並用特殊的回調方法將該接口的實例提供給使用者。例如,提供者可以為用戶信息表中包含 Web 用戶郵政編碼數據的字段實現 IWebPartField 接口。另一個充當使用者的 WebPart 控件則定義一個特殊的方法來接收該接口實例,然后可以提取郵政編碼數據,根據該郵政編碼查詢並顯示天氣信息。
IWebPartField 接口有兩個公開的成員。Schema 屬性返回 PropertyDescriptor 對象所封裝的數據字段的架構信息。GetFieldValue 方法聲明一個方法,在調用回調方法時,實施者(如提供者控件)使用該方法檢索接口實例的字段數據。
參考鏈接
http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.webparts.iwebpartfield(v=VS.80).aspx