WebPartManager.CanConnectWebParts メソッド

定義

接続に関係する WebPart コントロールをチェックし、こうしたコントロールを接続できるかどうかを判断します。

オーバーロード

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint)

コンシューマー コントロールとプロバイダー コントロールが互換性のあるインターフェイスを持ち、WebPart オブジェクトが不要な場合に、接続に関係する WebPartTransformer コントロールをチェックし、こうしたコントロールを接続できるかどうかを判断します。

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint, WebPartTransformer)

接続に関係する WebPart コントロールをチェックして、こうしたコントロールが接続可能かどうかを判断し、WebPartTransformer オブジェクトを使用して互換性のないコンシューマーとプロバイダーの間に接続を作成します。

注釈

この CanConnectWebParts メソッドは、2 つの WebPart コントロールを接続できるかどうかを判断するために使用されます。 このメソッドは、通常、メソッドを呼び出す前の条件付きチェックとして使用されます ConnectWebParts

このメソッドは CanConnectWebParts 、2 つのコントロールが接続を形成する前に満たす必要があるいくつかの条件をチェックします。 次の一覧は、接続を確立するための主な条件をまとめたものです。 これらすべての条件 (およびいくつかの追加の内部条件) が満たされている場合、メソッド trueは制御を接続できることを意味します。

  • プロバイダー コントロールとコンシューマー コントロールは使用できず null、プロパティによって参照されるコントロールのコレクションに WebParts 含まれている必要があります。

  • プロバイダーとコンシューマーを同じコントロールにすることはできません。 つまり、コントロールは WebPart それ自体に接続できません。

  • ConnectionPointプロバイダーとコンシューマーの両方のオブジェクト (接続ポイント) を指定nullすることはできません。

  • プロバイダーとコンシューマーを閉じることはできません (どちらのコントロールの IsClosed プロパティも閉じることはできません true)。

  • 接続ポイント コントロールのプロパティは ControlType 、コンシューマーとプロバイダーの両方のコントロールの型と一致する必要があります。

  • 接続ポイントは両方とも有効にする必要があります (メソッド GetEnabled は両方とも返す true必要があります)。

  • 各接続ポイントは、独自 AllowsMultipleConnections のプロパティで指定されている接続よりも多くの接続を形成しようとしないでください。

  • 互換性のないコントロールをWebPartTransformer接続するためにオブジェクト (トランスフォーマー) が必要な場合は、null ただし、コントロールに既に互換性がある場合は、トランスフォーマーを使用する null必要があります。

  • トランスフォーマー (使用されている場合) は、コレクション内で参照する AvailableTransformers 必要があります。

  • トランスフォーマー (使用されている場合) には、プロバイダーとコンシューマーと互換性のあるインターフェイスが必要であり、2 つのコントロール間でデータを変換できるようにする必要があります。 コンシューマーとプロバイダーのセカンダリ インターフェイスにも互換性がある必要があります。

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint)

コンシューマー コントロールとプロバイダー コントロールが互換性のあるインターフェイスを持ち、WebPart オブジェクトが不要な場合に、接続に関係する WebPartTransformer コントロールをチェックし、こうしたコントロールを接続できるかどうかを判断します。

public:
 bool CanConnectWebParts(System::Web::UI::WebControls::WebParts::WebPart ^ provider, System::Web::UI::WebControls::WebParts::ProviderConnectionPoint ^ providerConnectionPoint, System::Web::UI::WebControls::WebParts::WebPart ^ consumer, System::Web::UI::WebControls::WebParts::ConsumerConnectionPoint ^ consumerConnectionPoint);
public bool CanConnectWebParts (System.Web.UI.WebControls.WebParts.WebPart provider, System.Web.UI.WebControls.WebParts.ProviderConnectionPoint providerConnectionPoint, System.Web.UI.WebControls.WebParts.WebPart consumer, System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint consumerConnectionPoint);
member this.CanConnectWebParts : System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ProviderConnectionPoint * System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint -> bool
Public Function CanConnectWebParts (provider As WebPart, providerConnectionPoint As ProviderConnectionPoint, consumer As WebPart, consumerConnectionPoint As ConsumerConnectionPoint) As Boolean

パラメーター

provider
WebPart

コントロールを接続したときに、consumer にデータを提供するコントロール。

providerConnectionPoint
ProviderConnectionPoint

provider が接続に関与できるようにする ConnectionPoint

consumer
WebPart

コントロールを接続したときに、provider からデータを受け取るコントロール。

consumerConnectionPoint
ConsumerConnectionPoint

consumer が接続に関与できるように、コールバック メソッドとして機能する ConnectionPoint

戻り値

Boolean

providerconsumer を接続できるかどうかを示すブール値。

次のコード例は、このメソッドの使用方法を示しています。

コード例には、次の 4 つの部分があります。

  • Web パーツ ページの表示モードを変更できるユーザー コントロール。

  • 接続できる 2 つのカスタム WebPart コントロール、要素、およびメソッドを使用してCanConnectWebParts接続を<asp:webpartmanager>作成するイベント処理コードを含む Web ページ。

  • 2 つのカスタム コントロールとカスタム WebPart インターフェイスを含むソース コード ファイル。

  • ブラウザーでの例の動作の説明。

コード例の最初の部分は、表示モードを変更するためのユーザー コントロールです。 ユーザー コントロールのソース コードは、クラスの概要の WebPartManager 「例」セクションから取得できます。 表示モードとユーザー コントロールの動作の詳細については、「チュートリアル: Web パーツ ページでの表示モードの変更」を参照してください。

Web ページの宣言型マークアップには、 Register ユーザー コントロールとカスタム コントロールの両方のディレクティブが含まれています。 <asp:webpartmanager>要素、カスタム コントロールを<asp:webpartzone>格納する要素、および要素があります<asp:connectionszone>。 このメソッドでは Page_Load 、接続が可能かどうかがコードによってチェックされ、確立されている場合は、プロバイダー、コンシューマー、およびそれぞれの接続ポイントが定義され、プロパティによって参照される静的接続のセットに新しい接続が StaticConnections 追加されます。

<%@ Page Language="C#" %>
<%@ register TagPrefix="uc1" 
  TagName="DisplayModeMenuCS" 
  Src="DisplayModeMenuCS.ascx" %>
<%@ register tagprefix="aspSample" 
  Namespace="Samples.AspNet.CS.Controls" 
  Assembly="ConnectionSampleCS"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

  protected void Page_Load(object sender, EventArgs e)
  {
    
    // Define provider, consumer, and connection points.
    WebPart provider = mgr.WebParts["zip1"];
    ProviderConnectionPoint provConnPoint =
      mgr.GetProviderConnectionPoints(provider)["ZipCodeProvider"];
    WebPart consumer = mgr.WebParts["weather1"];
    ConsumerConnectionPoint consConnPoint =
      mgr.GetConsumerConnectionPoints(consumer)["ZipCodeConsumer"];
    
    // Check whether the connection already exists.
    if (mgr.CanConnectWebParts(provider, provConnPoint,
      consumer, consConnPoint))
    {
      // Create a new static connection.
      WebPartConnection conn = new WebPartConnection();
      conn.ID = "staticConn1";
      conn.ConsumerID = "weather1";
      conn.ConsumerConnectionPointID = "ZipCodeConsumer";
      conn.ProviderID = "zip1";
      conn.ProviderConnectionPointID = "ZipCodeProvider";
      mgr.StaticConnections.Add(conn);
    }
 }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <!-- Reference the WebPartManager control. -->
      <asp:WebPartManager ID="mgr" runat="server" />   
    <div>
      <uc1:DisplayModeMenuCS ID="displaymode1" 
        runat="server" />
      <!-- Reference consumer and provider controls 
           in a zone. -->
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:ZipCodeWebPart ID="zip1" 
            runat="server" 
            Title="Zip Code Control"/>
          <aspSample:WeatherWebPart ID="weather1" 
            runat="server" 
            Title="Weather Control" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <hr />
      <!-- Add a ConnectionsZone so users can connect 
           controls. -->
      <asp:ConnectionsZone ID="ConnectionsZone1" 
        runat="server" />
    </div>
    </form>
</body>
</html>
<%@ Page Language="vb" %>
<%@ register TagPrefix="uc1" 
  TagName="DisplayModeMenuVB" 
  Src="DisplayModeMenuVB.ascx" %>
<%@ register tagprefix="aspSample" 
  Namespace="Samples.AspNet.VB.Controls" 
  Assembly="ConnectionSampleVB"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

  Protected Sub Page_Load(ByVal sender As Object, _
    ByVal e As System.EventArgs)
    
    ' Define provider, consumer, and connection points.
    Dim provider As WebPart = mgr.WebParts("zip1")
    Dim provConnPoint As ProviderConnectionPoint = _
      mgr.GetProviderConnectionPoints(provider)("ZipCodeProvider")
    Dim consumer As WebPart = mgr.WebParts("weather1")
    Dim consConnPoint As ConsumerConnectionPoint = _
      mgr.GetConsumerConnectionPoints(consumer)("ZipCodeConsumer")
    
    ' Check whether the connection already exists.
    If mgr.CanConnectWebParts(provider, provConnPoint, _
      consumer, consConnPoint) Then
      ' Create a new static connection.
      Dim conn As New WebPartConnection()
      conn.ID = "staticConn1"
      conn.ConsumerID = "weather1"
      conn.ConsumerConnectionPointID = "ZipCodeConsumer"
      conn.ProviderID = "zip1"
      conn.ProviderConnectionPointID = "ZipCodeProvider"
      mgr.StaticConnections.Add(conn)
    End If
    
  End Sub
  
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <!-- Reference the WebPartManager control. -->
      <asp:WebPartManager ID="mgr" runat="server" />   
    <div>
      <uc1:DisplayModeMenuVB ID="displaymode1" 
        runat="server" />
      <!-- Reference consumer and provider controls 
           in a zone. -->
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:ZipCodeWebPart ID="zip1" 
            runat="server" 
            Title="Zip Code Control"/>
          <aspSample:WeatherWebPart ID="weather1" 
            runat="server" 
            Title="Weather Control" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <hr />
      <!-- Add a ConnectionsZone so users can connect 
           controls. -->
      <asp:ConnectionsZone ID="ConnectionsZone1" 
        runat="server" />
    </div>
    </form>
</body>
</html>

この例の 3 番目の部分は、コントロールのソース コードです。 インターフェイスと 2 つのカスタム WebPart コントロールが含まれています。1 つはプロバイダーとして機能し、もう 1 つはコンシューマーとして機能します。 これらは互換性のある接続ポイントを持っているため (両方ともインターフェイスを IZipCode 認識します)、接続を行うためにトランスフォーマーは必要ありません。 コード例を実行するには、このソース コードをコンパイルする必要があります。 明示的にコンパイルし、結果のアセンブリを Web サイトの Bin フォルダーまたはグローバル アセンブリ キャッシュに配置できます。 または、ソース コードをサイトの App_Code フォルダーに配置して、実行時に動的にコンパイルすることもできます。 コンパイル方法を示すチュートリアルについては、「 チュートリアル: カスタム Web サーバー コントロールの開発と使用」を参照してください。

namespace Samples.AspNet.CS.Controls
{
  using System;
  using System.Web;
  using System.Web.Security;
  using System.Security.Permissions;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Web.UI.WebControls.WebParts;

  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public interface IZipCode
  {
    string ZipCode { get; set;}
  }

  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public class ZipCodeWebPart : WebPart, IZipCode
  {
    string zipCodeText = String.Empty;
    TextBox input;
    Button send;

    public ZipCodeWebPart()
    {
    }

    // Make the implemented property personalizable to save 
    // the Zip Code between browser sessions.
    [Personalizable()]
    public virtual string ZipCode
    {
      get { return zipCodeText; }
      set { zipCodeText = value; }
    }

    // This is the callback method that returns the provider.
    [ConnectionProvider("Zip Code", "ZipCodeProvider")]
    public IZipCode ProvideIZipCode()
    {
      return this;
    }

    protected override void CreateChildControls()
    {
      Controls.Clear();
      input = new TextBox();
      this.Controls.Add(input);
      send = new Button();
      send.Text = "Enter 5-digit Zip Code";
      send.Click += new EventHandler(this.submit_Click);
      this.Controls.Add(send);
    }

    private void submit_Click(object sender, EventArgs e)
    {
      if (!string.IsNullOrEmpty(input.Text))
      {
        zipCodeText = Page.Server.HtmlEncode(input.Text);
        input.Text = String.Empty;
      }
    }
  }

  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public class WeatherWebPart : WebPart
  {
    private IZipCode _provider;
    string _zipSearch;
    Label DisplayContent;

    // This method is identified by the ConnectionConsumer 
    // attribute, and is the mechanism for connecting with 
    // the provider. 
    [ConnectionConsumer("Zip Code", "ZipCodeConsumer")]
    public void GetIZipCode(IZipCode Provider)
    {
      _provider = Provider;
    }
    
    protected override void OnPreRender(EventArgs e)
    {
      EnsureChildControls();

      if (this._provider != null)
      {
        _zipSearch = _provider.ZipCode.Trim();
        DisplayContent.Text = "My Zip Code is:  " + _zipSearch;
      }
    }

    protected override void CreateChildControls()
    {
      Controls.Clear();
      DisplayContent = new Label();
      this.Controls.Add(DisplayContent);
    }
  }
}
Imports System.Web
Imports System.Web.Security
Imports System.Security.Permissions
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts

Namespace Samples.AspNet.VB.Controls

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Interface IZipCode

    Property ZipCode() As String

  End Interface

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class ZipCodeWebPart
    Inherits WebPart
    Implements IZipCode
    Private zipCodeText As String = String.Empty
    Private input As TextBox
    Private send As Button

    Public Sub New()
    End Sub

    ' Make the implemented property personalizable to save 
    ' the Zip Code between browser sessions.
    <Personalizable()> _
    Public Property ZipCode() As String _
      Implements IZipCode.ZipCode

      Get
        Return zipCodeText
      End Get
      Set(ByVal value As String)
        zipCodeText = value
      End Set
    End Property

    ' This is the callback method that returns the provider.
    <ConnectionProvider("Zip Code", "ZipCodeProvider")> _
    Public Function ProvideIZipCode() As IZipCode
      Return Me
    End Function


    Protected Overrides Sub CreateChildControls()
      Controls.Clear()
      input = New TextBox()
      Me.Controls.Add(input)
      send = New Button()
      send.Text = "Enter 5-digit Zip Code"
      AddHandler send.Click, AddressOf Me.submit_Click
      Me.Controls.Add(send)

    End Sub


    Private Sub submit_Click(ByVal sender As Object, _
      ByVal e As EventArgs)

      If input.Text <> String.Empty Then
        zipCodeText = Page.Server.HtmlEncode(input.Text)
        input.Text = String.Empty
      End If

    End Sub

  End Class

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class WeatherWebPart
    Inherits WebPart
    Private _provider As IZipCode
    Private _zipSearch As String
    Private DisplayContent As Label

    ' This method is identified by the ConnectionConsumer 
    ' attribute, and is the mechanism for connecting with 
    ' the provider. 
    <ConnectionConsumer("Zip Code", "ZipCodeConsumer")> _
    Public Sub GetIZipCode(ByVal Provider As IZipCode)
      _provider = Provider
    End Sub


    Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
      EnsureChildControls()

      If Not (Me._provider Is Nothing) Then
        _zipSearch = _provider.ZipCode.Trim()
                DisplayContent.Text = "My Zip Code is:  " + _zipSearch
      End If

    End Sub

    Protected Overrides Sub CreateChildControls()
      Controls.Clear()
      DisplayContent = New Label()
      Me.Controls.Add(DisplayContent)

    End Sub

  End Class

End Namespace

ブラウザーに Web ページを読み込んだ後、[表示モード] ドロップダウン リスト コントロールをクリックし、Connect を選択してページを接続モードに切り替えます。 Connect モードでは、要素を<asp:connectionszone>使用してコントロール間の接続を作成できます。 接続モードで、ZIP コード コントロールのタイトル バーの下向き矢印をクリックして動詞メニューをアクティブにし、[Connect] をクリックします。 接続ユーザー インターフェイス (UI) が表示されたら、メソッドに含まれるコードによって接続が既に作成されていることに Page_Load 注意してください。

注釈

このメソッドは、接続に provider 使用され、 consumer 両方のコントロールに互換性のある接続ポイントの種類があるため WebPartTransformer 、オブジェクトは必要ありません。 このメソッドを使用して、プログラム接続を作成するために呼び出す ConnectWebParts 前に、2 つのコントロールを接続できることを確認できます。

このオーバーロードはメソッド オーバーロードと同じ実装を CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint, WebPartTransformer) 使用しますが、唯一の例外は、このオーバーロードにトランスフォーマーが必要ない点です。

こちらもご覧ください

適用対象

CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint, WebPartTransformer)

接続に関係する WebPart コントロールをチェックして、こうしたコントロールが接続可能かどうかを判断し、WebPartTransformer オブジェクトを使用して互換性のないコンシューマーとプロバイダーの間に接続を作成します。

public:
 virtual bool CanConnectWebParts(System::Web::UI::WebControls::WebParts::WebPart ^ provider, System::Web::UI::WebControls::WebParts::ProviderConnectionPoint ^ providerConnectionPoint, System::Web::UI::WebControls::WebParts::WebPart ^ consumer, System::Web::UI::WebControls::WebParts::ConsumerConnectionPoint ^ consumerConnectionPoint, System::Web::UI::WebControls::WebParts::WebPartTransformer ^ transformer);
public virtual bool CanConnectWebParts (System.Web.UI.WebControls.WebParts.WebPart provider, System.Web.UI.WebControls.WebParts.ProviderConnectionPoint providerConnectionPoint, System.Web.UI.WebControls.WebParts.WebPart consumer, System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint consumerConnectionPoint, System.Web.UI.WebControls.WebParts.WebPartTransformer transformer);
abstract member CanConnectWebParts : System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ProviderConnectionPoint * System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint * System.Web.UI.WebControls.WebParts.WebPartTransformer -> bool
override this.CanConnectWebParts : System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ProviderConnectionPoint * System.Web.UI.WebControls.WebParts.WebPart * System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint * System.Web.UI.WebControls.WebParts.WebPartTransformer -> bool
Public Overridable Function CanConnectWebParts (provider As WebPart, providerConnectionPoint As ProviderConnectionPoint, consumer As WebPart, consumerConnectionPoint As ConsumerConnectionPoint, transformer As WebPartTransformer) As Boolean

パラメーター

provider
WebPart

コントロールを接続したときに、consumer にデータを提供するコントロール。

providerConnectionPoint
ProviderConnectionPoint

provider が接続に関与できるように、コールバック メソッドとして機能する ConnectionPoint

consumer
WebPart

コントロールを接続したときに、provider からデータを受け取るコントロール。

consumerConnectionPoint
ConsumerConnectionPoint

consumer が接続に関与できるように、コールバック メソッドとして機能する ConnectionPoint

transformer
WebPartTransformer

互換性のない providerconsumer の接続を可能にする WebPartTransformer

戻り値

Boolean

providerconsumer で接続を構成できるかどうかを示すブール値。

注釈

このメソッドは、オブジェクトが必要になるように、両方のコントロールに互換性のない接続ポイントの種類があるWebPartTransformer場合に接続するためにprovider``consumer使用されます。 このメソッドを使用して、プログラム接続を作成するために呼び出す ConnectWebParts 前に、2 つのコントロールを接続できることを確認できます。

このオーバーロードはメソッド オーバーロードと同じ実装を CanConnectWebParts(WebPart, ProviderConnectionPoint, WebPart, ConsumerConnectionPoint) 使用しますが、唯一の例外は、このオーバーロードにトランスフォーマーが必要であるという点です。

適用対象