• 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

  • 相关阅读:
    MVC应用程序与单选列表
    jQuery UI的datepicker()与变更格式
    MVC应用程序,动态创建单选列表(RadioButtonList)
    MVC应用程序中,怎样控制与复制相同的功能
    为PartialView传递一个参数
    Nginx高并发性能优化
    Nginx上传和超时时间限制 (php上传限制)
    Nginx反向代理Tomcat访问时浏览器加载失败,出现 ERR_CONTENT_LENGTH_MISMATCH 问题
    Nginx域名访问的白名单配置
    日常运维中的一键安装或启停脚本
  • 原文地址:https://www.cnblogs.com/jianyus/p/3657400.html
Copyright © 2020-2023  润新知