• SharePoint 自定义WebPart之间的连接


    来源:http://www.cnblogs.com/jianyus/p/3657400.html

    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

    天天想你红枣,您的健康,‘枣‘的承诺 天天想你红枣淘宝店

  • 相关阅读:
    (BFS 二叉树) leetcode 515. Find Largest Value in Each Tree Row
    (二叉树 BFS) leetcode513. Find Bottom Left Tree Value
    (二叉树 BFS DFS) leetcode 104. Maximum Depth of Binary Tree
    (二叉树 BFS DFS) leetcode 111. Minimum Depth of Binary Tree
    (BFS) leetcode 690. Employee Importance
    (BFS/DFS) leetcode 200. Number of Islands
    (最长回文子串 线性DP) 51nod 1088 最长回文子串
    (链表 importance) leetcode 2. Add Two Numbers
    (链表 set) leetcode 817. Linked List Components
    (链表 双指针) leetcode 142. Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/TNSSTAR/p/3683542.html
Copyright © 2020-2023  润新知