SharePoint 自定義WebPart之間的連接


  1、創建SharePoint解決方案,添加兩個WebPart分別用來發送和接收;

clip_image001

  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,然后連接,如下圖:

clip_image002

  5、查看效果

  點擊Send前,只能看到頁面上的兩個webpart,如下圖:

clip_image003

  在TextBox中輸入值,點擊Send,刷新頁面,TextBox中的值已經從SendWebPart中發送到ReceiveWebPart中了,兩個自定義WebPart連接成功!

clip_image004

  在完成了兩個自定義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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM