次の方法で共有


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

戻り値

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

注釈

このメソッドは、オブジェクトが不要になるように、両方のコントロールに互換性のある接続ポイントの種類があるWebPartTransformer場合と を接続providerconsumerするために使用されます。 このメソッドを使用して、 を呼び出 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

戻り値

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

注釈

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

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

適用対象