ProviderConnectionPoint クラス
アセンブリ: System.Web (system.web.dll 内)

Public Class ProviderConnectionPoint Inherits ConnectionPoint
public class ProviderConnectionPoint : ConnectionPoint
public class ProviderConnectionPoint extends ConnectionPoint
public class ProviderConnectionPoint extends ConnectionPoint

2 つのサーバー コントロール間におけるすべての Web パーツ接続で、それぞれのコントロールが関連コネクション ポイント オブジェクトを持っている必要があります。関連コネクション ポイント オブジェクトでは、コントロールがもう一方のコントロールに接続でき、コントロールがその接続に関してプロバイダとコンシューマのどちらとして指定されているかに応じて、データの提供側または使用側のいずれかとして動作できます。通常、ConnectionPoint オブジェクトには、一方のコントロールがもう一方のコントロールに接続する方法および共有できるデータの種類に関する詳細が格納されています。接続でプロバイダとして動作するコントロールの場合、そのコネクション ポイントは ProviderConnectionPoint オブジェクトである必要があります。Web パーツ接続とコネクション ポイントの詳細については、後の「参照」セクションに一覧表示されているトピックを参照してください。
ProviderConnectionPoint オブジェクトを作成するには、次の手順を実行する必要があります。
-
インターフェイスを作成します。プロバイダがコンシューマとデータを共有する場合は、プロバイダはインターフェイスのインスタンスを取得し、そのインスタンスをコンシューマに返すことによってインターフェイスを作成します。
-
プロバイダ内にインターフェイスを実装します。プロバイダとして動作させる WebPart または他のサーバー コントロール (WebPartZoneBase ゾーン内の任意の種類のサーバー コントロールを使用できます) は、最初の手順で作成されたインターフェイスを実装する必要があります。
-
コールバック メソッドを識別します。プロバイダのメソッドは、接続を確立するためのコールバック メソッドとして識別する必要があります。このメソッドは、実装されたインターフェイスのインスタンスをコンシューマに返します。Web パーツでプロバイダのコールバック メソッドを識別するには、インターフェイス インスタンスを返すメソッドに ConnectionProvider メタデータ属性 (ConnectionProviderAttribute クラスで定義) を追加します。この属性を追加すると、必須となるパラメータは、プロバイダ コネクション ポイントで使用する表示名だけになります。コネクション ポイントの ID など、省略可能なパラメータも追加できます。
コントロールがプロバイダとして動作するように装備されると、そのコントロールは接続に参加できます (コンシューマ コントロールも既に装備され利用可能になっていることが前提です)。Web ページのマークアップで静的な宣言接続を作成するには、開発者は、<asp:webpartconnection> 要素を使用できます。コールバック メソッドを識別するプロバイダ ソース コードの ConnectionProvider 属性にコネクション ポイントの ID を指定する場合、その値をページの <asp:webpartconnection> 要素の ProviderConnectionPointID 属性に割り当てる必要があります。開発者がプロバイダ コネクション ポイントに ID を指定する理由の 1 つは、プロバイダ コントロールに複数のコネクション ポイントが存在する場合があるためです。プロバイダ コントロールのプロバイダ コネクション ポイントに ID が指定されていない場合、DefaultID フィールドから取得された既定値を使用して接続が作成されるため、どのページの ProviderConnectionPointID 属性にも値を割り当てる必要はありません。
コードで接続を作成するには、GetProviderConnectionPoints メソッドを呼び出して、このメソッドにプロバイダ コントロールで定義済みの ProviderConnectionPoint オブジェクトの ID またはインデックスと共にプロバイダ コントロールの ID を渡すことにより、新しい ProviderConnectionPoint オブジェクトを作成する必要があります。返された ProviderConnectionPoint オブジェクト、プロバイダ コントロールへの参照、コンシューマ コントロールへの参照、および対応する ConsumerConnectionPoint オブジェクトは、新しい WebPartConnection オブジェクトを作成する ConnectWebParts メソッドにすべて渡されます。
開発者は接続を確立する手順の一部として宣言またはプログラムいずれかの方法でプロバイダ コネクション ポイントを使用できますが、ユーザーもユーザー インターフェイス (UI) を通じてプロバイダ コネクション ポイントを操作することにより接続を確立できます。開発者が Web ページで ConnectionsZone コントロールを宣言すると、接続を作成するランタイム UI がユーザーに表示されます。ユーザーがその Connect 動詞をクリックし、接続を確立する際の開始ポイントとしてプロバイダ コントロールを選択すると (コンシューマを選択することもできますが、接続に違いはありません)、プロバイダからのデータの送信先として、利用可能なコンシューマ接続ポイントの表示名が示されたドロップダウン リスト コントロールが UI に表示されます。ユーザーが接続を確立するには、プロバイダ コネクション ポイントを選択する必要があります。
ProviderConnectionPoint オブジェクトは、特定のプロバイダ コントロールと直接関連付けられ、基本クラスの ConnectionPoint から継承するプロパティに接続の詳細を格納します。たとえば、プロバイダ コネクション ポイントは、プロバイダによって返されるインターフェイスの種類を、継承された InterfaceType プロパティに保持します。接続のプロバイダとコンシューマが両方とも同じインターフェイス型に対応している場合、コントロールには互換性があり、直接接続を作成できます。プロバイダとコンシューマが同じインターフェイス型に対応していない場合は、それらの間に互換性がないため、WebPartTransformer オブジェクトを使用して、プロバイダ コネクション ポイントの InterfaceType 値をコンシューマが対応している型に変換する必要があります。もう 1 つの重要な継承されるプロパティは、DisplayName プロパティです。このプロパティは、接続の作成時にユーザーがプロバイダ コネクション ポイントを選択する際の UI に表示する表示名を提供します。表示名は、開発者がプロバイダ コントロールのコールバック メソッドに ConnectionProvider 属性を追加するときの必須パラメータです。継承された ID プロパティも便利です。これは、前に説明したように、プロバイダが複数のコネクション ポイントを持つイベント内のプロバイダ コネクション ポイントに一意の識別子を提供するためです。プロバイダは、内部に定義された複数の ProviderConnectionPoint オブジェクトを持つことができます。この場合、開発者はメソッドに ConnectionProvider 属性を追加すると、各コネクション ポイントを区別するための ID 値を指定する必要があります。もう 1 つの重要な継承されるプロパティは、AllowsMultipleConnections プロパティ です。このプロパティは、プロバイダ コネクション ポイントが複数のコンシューマに同時に接続できるかどうかを示します。既定では、プロバイダ コネクション ポイントの場合、このプロパティ値は true です (ただし、コンシューマ接続ポイントは既定で false になります)。
ProviderConnectionPoint クラスは、ConnectionPoint クラスから継承するメンバに、固有のメソッドをいくつか追加します。GetObject メソッドは、コールバック メソッドがコンシューマに返すインターフェイスのインスタンスを取得します。GetSecondaryInterfaces メソッドは、既存の接続の一部だが接続の確立には使用されない、その他のカスタマ インターフェイスを取得します。

宣言、プログラム、または UI それぞれでプロバイダ コネクション ポイントを使用して接続を作成する簡単な方法のコード例を次に示します。
コード例の最初の部分は、Web ページ上の表示モードをユーザーが変更できるようにするユーザー コントロールです。次のソース コードを .ascx ファイルに保存し、ホストしている Web ページの一番上付近にある、このユーザー コントロールの Register ディレクティブの Src 属性に割り当てられているファイル名を付けます。表示モードの詳細、およびこのコントロールのソース コードの説明については、「チュートリアル : Web パーツ ページでの表示モードの変更」を参照してください。
<%@ control language="vb" classname="DisplayModeMenuVB"%> <script runat="server"> ' Use a field to reference the current WebPartManager. Dim _manager As WebPartManager Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs) AddHandler Page.InitComplete, AddressOf InitComplete End Sub Sub InitComplete(ByVal sender As Object, ByVal e As System.EventArgs) _manager = WebPartManager.GetCurrentWebPartManager(Page) Dim browseModeName As String = WebPartManager.BrowseDisplayMode.Name ' Fill the dropdown with the names of supported display modes. Dim mode As WebPartDisplayMode For Each mode In _manager.SupportedDisplayModes Dim modeName As String = mode.Name ' Make sure a mode is enabled before adding it. If mode.IsEnabled(_manager) Then Dim item As New ListItem(modeName, modeName) DisplayModeDropdown.Items.Add(item) End If Next mode ' If shared scope is allowed for this user, display the scope-switching ' UI and select the appropriate radio button for the current user scope. If _manager.Personalization.CanEnterSharedScope Then Panel2.Visible = True If _manager.Personalization.Scope = PersonalizationScope.User Then RadioButton1.Checked = True Else RadioButton2.Checked = True End If End If End Sub ' Change the page to the selected display mode. Sub DisplayModeDropdown_SelectedIndexChanged(ByVal sender As Object, _ ByVal e As EventArgs) Dim selectedMode As String = DisplayModeDropdown.SelectedValue Dim mode As WebPartDisplayMode = _ _manager.SupportedDisplayModes(selectedMode) If Not (mode Is Nothing) Then _manager.DisplayMode = mode End If End Sub ' Set the selected item equal to the current display mode. Sub Page_PreRender(ByVal sender As Object, ByVal e As EventArgs) Dim items As ListItemCollection = DisplayModeDropdown.Items Dim selectedIndex As Integer = _ items.IndexOf(items.FindByText(_manager.DisplayMode.Name)) DisplayModeDropdown.SelectedIndex = selectedIndex End Sub ' Reset all of a user's personalization data for the page. Protected Sub LinkButton1_Click(ByVal sender As Object, _ ByVal e As EventArgs) _manager.Personalization.ResetPersonalizationState() End Sub ' If not in User personalization scope, toggle into it. Protected Sub RadioButton1_CheckedChanged(ByVal sender As Object, _ ByVal e As EventArgs) If _manager.Personalization.Scope = PersonalizationScope.Shared Then _manager.Personalization.ToggleScope() End If End Sub ' If not in Shared scope, and if user is allowed, toggle the scope. Protected Sub RadioButton2_CheckedChanged(ByVal sender As Object, _ ByVal e As EventArgs) If _manager.Personalization.CanEnterSharedScope AndAlso _ _manager.Personalization.Scope = PersonalizationScope.User Then _manager.Personalization.ToggleScope() End If End Sub </script> <div> <asp:Panel ID="Panel1" runat="server" Borderwidth="1" Width="230" BackColor="lightgray" Font-Names="Verdana, Arial, Sans Serif" > <asp:Label ID="Label1" runat="server" Text=" Display Mode" Font-Bold="true" Font-Size="8" Width="120" /> <asp:DropDownList ID="DisplayModeDropdown" runat="server" AutoPostBack="true" Width="120" OnSelectedIndexChanged="DisplayModeDropdown_SelectedIndexChanged" /> <asp:LinkButton ID="LinkButton1" runat="server" Text="Reset User State" ToolTip="Reset the current user's personalization data for the page." Font-Size="8" OnClick="LinkButton1_Click" /> <asp:Panel ID="Panel2" runat="server" GroupingText="Personalization Scope" Font-Bold="true" Font-Size="8" Visible="false" > <asp:RadioButton ID="RadioButton1" runat="server" Text="User" AutoPostBack="true" GroupName="Scope" OnCheckedChanged="RadioButton1_CheckedChanged" /> <asp:RadioButton ID="RadioButton2" runat="server" Text="Shared" AutoPostBack="true" GroupName="Scope" OnCheckedChanged="RadioButton2_CheckedChanged" /> </asp:Panel> </asp:Panel> </div>
<%@ control language="C#" classname="DisplayModeMenuCS"%> <script runat="server"> // Use a field to reference the current WebPartManager. WebPartManager _manager; void Page_Init(object sender, EventArgs e) { Page.InitComplete += new EventHandler(InitComplete); } void InitComplete(object sender, System.EventArgs e) { _manager = WebPartManager.GetCurrentWebPartManager(Page); String browseModeName = WebPartManager.BrowseDisplayMode.Name; // Fill the dropdown with the names of supported display modes. foreach (WebPartDisplayMode mode in _manager.SupportedDisplayModes) { String modeName = mode.Name; // Make sure a mode is enabled before adding it. if (mode.IsEnabled(_manager)) { ListItem item = new ListItem(modeName, modeName); DisplayModeDropdown.Items.Add(item); } } // If shared scope is allowed for this user, display the scope-switching // UI and select the appropriate radio button for the current user scope. if (_manager.Personalization.CanEnterSharedScope) { Panel2.Visible = true; if (_manager.Personalization.Scope == PersonalizationScope.User) RadioButton1.Checked = true; else RadioButton2.Checked = true; } } // Change the page to the selected display mode. void DisplayModeDropdown_SelectedIndexChanged(object sender, EventArgs e) { String selectedMode = DisplayModeDropdown.SelectedValue; WebPartDisplayMode mode = _manager.SupportedDisplayModes[selectedMode]; if (mode != null) _manager.DisplayMode = mode; } // Set the selected item equal to the current display mode. void Page_PreRender(object sender, EventArgs e) { ListItemCollection items = DisplayModeDropdown.Items; int selectedIndex = items.IndexOf(items.FindByText(_manager.DisplayMode.Name)); DisplayModeDropdown.SelectedIndex = selectedIndex; } // Reset all of a user's personalization data for the page. protected void LinkButton1_Click(object sender, EventArgs e) { _manager.Personalization.ResetPersonalizationState(); } // If not in User personalization scope, toggle into it. protected void RadioButton1_CheckedChanged(object sender, EventArgs e) { if (_manager.Personalization.Scope == PersonalizationScope.Shared) _manager.Personalization.ToggleScope(); } // If not in Shared scope, and if user is allowed, toggle the scope. protected void RadioButton2_CheckedChanged(object sender, EventArgs e) { if (_manager.Personalization.CanEnterSharedScope && _manager.Personalization.Scope == PersonalizationScope.User) _manager.Personalization.ToggleScope(); } </script> <div> <asp:Panel ID="Panel1" runat="server" Borderwidth="1" Width="230" BackColor="lightgray" Font-Names="Verdana, Arial, Sans Serif" > <asp:Label ID="Label1" runat="server" Text=" Display Mode" Font-Bold="true" Font-Size="8" Width="120" /> <asp:DropDownList ID="DisplayModeDropdown" runat="server" AutoPostBack="true" Width="120" OnSelectedIndexChanged="DisplayModeDropdown_SelectedIndexChanged" /> <asp:LinkButton ID="LinkButton1" runat="server" Text="Reset User State" ToolTip="Reset the current user's personalization data for the page." Font-Size="8" OnClick="LinkButton1_Click" /> <asp:Panel ID="Panel2" runat="server" GroupingText="Personalization Scope" Font-Bold="true" Font-Size="8" Visible="false" > <asp:RadioButton ID="RadioButton1" runat="server" Text="User" AutoPostBack="true" GroupName="Scope" OnCheckedChanged="RadioButton1_CheckedChanged" /> <asp:RadioButton ID="RadioButton2" runat="server" Text="Shared" AutoPostBack="true" GroupName="Scope" OnCheckedChanged="RadioButton2_CheckedChanged" /> </asp:Panel> </asp:Panel> </div>
コード例の 2 番目の部分は、インターフェイスとコントロールのソース コードです。ソース ファイルには、IZipCode という名前の単純なインターフェイスが含まれています。また、インターフェイスを実装し、プロバイダ コントロールとして動作する、ZipCodeWebPart という名前の WebPart クラスも含まれています。このクラスの ProvideIZipCode メソッドは、インターフェイスの唯一のメンバを実装するコールバック メソッドです。このメソッドは、インターフェイスのインスタンスを単純に返します。このメソッドは、そのメタデータ内では、ConnectionProvider 属性でマークされています。これは、メソッドをプロバイダのコネクション ポイントのコールバック メソッドとして識別するための機構です。もう 1 つの WebPart クラスは WeatherWebPart という名前で、接続のコンシューマとして動作します。このクラスには、プロバイダ コントロールから IZipCode インターフェイスのインスタンスを取得する、GetZipCode という名前のメソッドがあります。このメソッドは、そのメタデータでは、ConnectionConsumer 属性によってコンシューマのコネクション ポイント メソッドとしてマークされています。これは、コンシューマ コントロールでコネクション ポイント メソッドを識別するための機構です。
コード例を実行するためには、このソース コードをコンパイルする必要があります。それを明示的にコンパイルし、コンパイル済みのアセンブリを Web サイトの Bin フォルダまたはグローバル アセンブリ キャッシュに配置できます。サイトの App_Code フォルダにソース コードを配置し、実行時に動的にコンパイルすることもできます。このコード例は、動的コンパイルを使用します。コンパイル方法を示すチュートリアルについては、「チュートリアル : カスタム サーバー コントロールの開発と使用」を参照してください。
Imports System 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 Provider", "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 Consumer", "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 'OnPreRender Protected Overrides Sub CreateChildControls() Controls.Clear() DisplayContent = New Label() Me.Controls.Add(DisplayContent) End Sub End Class End Namespace
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 Provider", "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 (input.Text != String.Empty) { 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 Consumer", "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); } } }
コード例の 3 番目の部分は Web ページです。一番上付近には、接続を形成するカスタム コントロールを登録するための Register ディレクティブと、ユーザーがページで表示モードを変更できるようにするユーザー コントロールがあります。接続自体は、ページ上の <staticconnections> 要素内で宣言によって作成されます。これは、接続を作成する方法の 1 つです。<asp:webpartconnection> 要素の ProviderConnectionPointID 属性に注意してください。また、プログラムによって接続を作成することもできます。そのためのコードは、Button1_Click メソッドにあります。その場合は、ProviderConnectionPoint オブジェクトが作成され、実際の接続を作成するメソッドに渡されます。接続が宣言によって作成される場合もプログラムによって作成される場合も、常に、プロバイダとコンシューマの両方に対してコネクション ポイントが指定されている必要があります。Button2_Click メソッドはプロバイダとコンシューマの両方の ConnectionPoint オブジェクトにアクセスし、それらのプロパティ値の一部をページ内のラベルに書き込みます。
<%@ Page Language="VB" %> <%@ register tagprefix="uc1" tagname="DisplayModeMenuVB" src="~/displaymodemenuvb.ascx" %> <%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB.Controls" %> <!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 Button1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Dim provPoint As ProviderConnectionPoint = _ mgr.GetProviderConnectionPoints(zip1)("ZipCodeProvider") Dim connPoint As ConsumerConnectionPoint = _ mgr.GetConsumerConnectionPoints(weather1)("ZipCodeConsumer") If mgr.CanConnectWebParts(zip1, provPoint, weather1, connPoint) Then mgr.ConnectWebParts(zip1, provPoint, weather1, connPoint) End If End Sub Protected Sub Button2_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Dim conn As WebPartConnection = mgr.Connections(0) lblConn.Text = "<h2>Connection Point Details</h2>" & _ "<h3>Provider Connection Point</h3>" & _ " Display name: " & conn.ProviderConnectionPoint.DisplayName & _ "<br />" & _ " ID: " & conn.ProviderConnectionPoint.ID & _ "<br />" & _ " Interface type: " & conn.ProviderConnectionPoint.InterfaceType.ToString() & _ "<br />" & _ " Control type: " & conn.ProviderConnectionPoint.ControlType.ToString() & _ "<br />" & _ " Allows multiple connections: " & _ conn.ProviderConnectionPoint.AllowsMultipleConnections.ToString() & _ "<br />" & _ " Enabled: " & conn.ProviderConnectionPoint.GetEnabled(zip1).ToString() & _ "<hr />" & _ "<h3>Consumer Connection Point</h3>" & _ " Display name: " & conn.ConsumerConnectionPoint.DisplayName & _ "<br />" & _ " ID: " & conn.ConsumerConnectionPoint.ID & _ "<br />" & _ " Interface type: " & conn.ConsumerConnectionPoint.InterfaceType.ToString() & _ "<br />" & _ " Control type: " & conn.ConsumerConnectionPoint.ControlType.ToString() & _ "<br />" & _ " Allows multiple connections: " & _ conn.ConsumerConnectionPoint.AllowsMultipleConnections.ToString() & _ "<br />" & _ " Enabled: " & conn.ConsumerConnectionPoint.GetEnabled(zip1).ToString() End Sub Protected Sub Page_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) lblConn.Text = String.Empty End Sub </script> <html > <head id="Head1" runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:WebPartManager ID="mgr" runat="server" > <StaticConnections> <asp:WebPartConnection ID="conn1" ConsumerConnectionPointID="ZipCodeConsumer" ConsumerID="weather1" ProviderConnectionPointID="ZipCodeProvider" ProviderID="zip1" /> </StaticConnections> </asp:WebPartManager> <uc1:displaymodemenuvb id="menu1" runat="server" /> <asp:WebPartZone ID="WebPartZone1" runat="server"> <ZoneTemplate> <aspSample:ZipCodeWebPart ID="zip1" runat="server" Title="Zip Code Provider" /> <aspSample:WeatherWebPart ID="weather1" runat="server" Title="Zip Code Consumer" /> </ZoneTemplate> </asp:WebPartZone> <asp:ConnectionsZone ID="ConnectionsZone1" runat="server"> </asp:ConnectionsZone> <asp:Button ID="Button1" runat="server" Text="Dynamic Connection" OnClick="Button1_Click" /> <br /> <asp:Button ID="Button2" runat="server" Text="Connection Point Details" OnClick="Button2_Click" /> <br /> <asp:Label ID="lblConn" runat="server" /> </div> </form> </body> </html>
<%@ Page Language="C#" %> <%@ register tagprefix="uc1" tagname="DisplayModeMenuCS" src="~/displaymodemenucs.ascx" %> <%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS.Controls" %> <!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 Button1_Click(object sender, EventArgs e) { ProviderConnectionPoint provPoint = mgr.GetProviderConnectionPoints(zip1)["ZipCodeProvider"]; ConsumerConnectionPoint connPoint = mgr.GetConsumerConnectionPoints(weather1)["ZipCodeConsumer"]; if(mgr.CanConnectWebParts(zip1, provPoint, weather1, connPoint)) mgr.ConnectWebParts(zip1, provPoint, weather1, connPoint); } protected void Button2_Click(object sender, EventArgs e) { WebPartConnection conn = mgr.Connections[0]; lblConn.Text = "<h2>Connection Point Details</h2>" + "<h3>Provider Connection Point</h3>" + " Display name: " + conn.ProviderConnectionPoint.DisplayName + "<br />" + " ID: " + conn.ProviderConnectionPoint.ID + "<br />" + " Interface type: " + conn.ProviderConnectionPoint.InterfaceType.ToString() + "<br />" + " Control type: " + conn.ProviderConnectionPoint.ControlType.ToString() + "<br />" + " Allows multiple connections: " + conn.ProviderConnectionPoint.AllowsMultipleConnections.ToString() + "<br />" + " Enabled: " + conn.ProviderConnectionPoint.GetEnabled(zip1).ToString() + "<hr />" + "<h3>Consumer Connection Point</h3>" + " Display name: " + conn.ConsumerConnectionPoint.DisplayName + "<br />" + " ID: " + conn.ConsumerConnectionPoint.ID + "<br />" + " Interface type: " + conn.ConsumerConnectionPoint.InterfaceType.ToString() + "<br />" + " Control type: " + conn.ConsumerConnectionPoint.ControlType.ToString() + "<br />" + " Allows multiple connections: " + conn.ConsumerConnectionPoint.AllowsMultipleConnections.ToString() + "<br />" + " Enabled: " + conn.ConsumerConnectionPoint.GetEnabled(zip1).ToString(); } protected void Page_Load(object sender, EventArgs e) { lblConn.Text = String.Empty; } </script> <html > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:WebPartManager ID="mgr" runat="server" > <StaticConnections> <asp:WebPartConnection ID="conn1" ConsumerConnectionPointID="ZipCodeConsumer" ConsumerID="weather1" ProviderConnectionPointID="ZipCodeProvider" ProviderID="zip1" /> </StaticConnections> </asp:WebPartManager> <uc1:displaymodemenucs id="menu1" runat="server" /> <asp:WebPartZone ID="WebPartZone1" runat="server"> <ZoneTemplate> <aspSample:ZipCodeWebPart ID="zip1" runat="server" Title="Zip Code Provider" /> <aspSample:WeatherWebPart ID="weather1" runat="server" Title="Zip Code Consumer" /> </ZoneTemplate> </asp:WebPartZone> <asp:ConnectionsZone ID="ConnectionsZone1" runat="server"> </asp:ConnectionsZone> <asp:Button ID="Button1" runat="server" Text="Dynamic Connection" OnClick="Button1_Click" /> <br /> <asp:Button ID="Button2" runat="server" Text="Connection Point Details" OnClick="Button2_Click" /> <br /> <asp:Label ID="lblConn" runat="server" /> </div> </form> </body> </html>
ブラウザでページを読み込んだら、[Connection Point Details] ボタンをクリックします。宣言による接続で確立された、プロバイダ コネクション ポイント情報とコンシューマ接続ポイント情報が表示されます。次に、[Display Mode] ドロップダウン コントロールを使用して、ページを接続モードに切り替えます。(タイトル バーに下向き矢印で表示される) [ZIP Code Consumer]WebPart コントロールの動詞メニューで、Connect 動詞をクリックします。ページ内で宣言された <asp:connectionszone> コントロールによって自動的に作成された、接続 UI が表示されます。これは、前述の宣言による方法とプログラムによる方法に加えて、(UI を通じて) 接続を作成するもう 1 つの方法です。[切断] ボタンをクリックし、既存の静的接続を終了します。[プロバイダへの接続の作成] リンクをクリックします。UI に、プロバイダ コネクション ポイントの表示名を一覧表示したドロップダウン コントロールが表示されます。ドロップダウン リストからコネクション ポイントを選択し、[接続] をクリックして接続を完了します。次に、[切断] を再びクリックします。続いて、[Dynamic Connection] ボタンをクリックし、プログラムによって接続を作成します。[Display Mode] コントロールを使用して、ページをブラウズ モードに戻します。[Connection Point Details] ボタンを再びクリックし、プロバイダ コネクション ポイント オブジェクトの詳細をもう一度表示します。
この例では、Web ページ マークアップで宣言された静的接続、ProviderConnectionPoint オブジェクトを使用したコードで作成された接続、および、接続 UI を通じてユーザーによって作成された接続という 3 つの方法で接続を確立し、プロバイダ コネクション ポイントを使用する方法を示しました。


System.Web.UI.WebControls.WebParts.ConnectionPoint
System.Web.UI.WebControls.WebParts.ProviderConnectionPoint


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


ProviderConnectionPoint コンストラクタ
アセンブリ: System.Web (system.web.dll 内)

Public Sub New ( _ callbackMethod As MethodInfo, _ interfaceType As Type, _ controlType As Type, _ displayName As String, _ id As String, _ allowsMultipleConnections As Boolean _ )
Dim callbackMethod As MethodInfo Dim interfaceType As Type Dim controlType As Type Dim displayName As String Dim id As String Dim allowsMultipleConnections As Boolean Dim instance As New ProviderConnectionPoint(callbackMethod, interfaceType, controlType, displayName, id, allowsMultipleConnections)
public ProviderConnectionPoint ( MethodInfo callbackMethod, Type interfaceType, Type controlType, string displayName, string id, bool allowsMultipleConnections )
public: ProviderConnectionPoint ( MethodInfo^ callbackMethod, Type^ interfaceType, Type^ controlType, String^ displayName, String^ id, bool allowsMultipleConnections )
public ProviderConnectionPoint ( MethodInfo callbackMethod, Type interfaceType, Type controlType, String displayName, String id, boolean allowsMultipleConnections )
public function ProviderConnectionPoint ( callbackMethod : MethodInfo, interfaceType : Type, controlType : Type, displayName : String, id : String, allowsMultipleConnections : boolean )

例外の種類 | 条件 |
---|---|
ArgumentNullException | callbackMethod が null 参照 (Visual Basic では Nothing) です。 または interfaceType が null 参照 (Visual Basic では Nothing) です。 または controlType が null 参照 (Visual Basic では Nothing) です。 または displayName が null 参照 (Visual Basic では Nothing) または空の文字列 ("") です。 |
ArgumentException |

ProviderConnectionPoint クラスの ProviderConnectionPoint コンストラクタは、基本コンストラクタを呼び出し、それにさまざまなパラメータを渡して基本クラスを初期化します。
基本クラスのコンストラクタは、コネクション ポイントの複数のパラメータをチェックし、いくつかの例外をスローする場合があります。発生する可能性のある例外の一覧については、「例外」のセクションを参照してください。
ProviderConnectionPoint コンストラクタを呼び出して、ProviderConnectionPoint クラスの独自のインスタンスを作成できます。しかし、単純に接続を確立するだけでクラスの拡張を行わない場合は、GetProviderConnectionPoints メソッドを呼び出し、既存のコネクション ポイント オブジェクトをプロバイダから返す必要があります。

ProviderConnectionPoint クラスの派生としてカスタム プロバイダ コネクション ポイントを作成する方法を次のコード例に示します。
コード例の最初の部分は、プロバイダおよびコンシューマの WebPart コントロールのソースと、TableProviderConnectionPoint という名前のカスタム ProviderConnectionPoint クラスです。TableProviderConnectionPoint クラスのコンストラクタは基本コンストラクタを呼び出し、「パラメータ」のセクションで示した必須パラメータを渡す必要があります。また、TableProviderWebPart クラスでは、接続のためのコールバック メソッドとして GetConnectionInterface メソッドが指定され、ConnectionProvider 属性がパラメータとしてカスタム TableProviderConnectionPoint を宣言していることも必要です。これは、カスタム プロバイダ コネクション ポイントを作成し、それをプロバイダ コントロールに関連付ける方法を示しています。この例は、ソース コードが動的にコンパイルされ、Web アプリケーションの App_Code サブフォルダ内のファイルにソース コード ファイルを 配置する必要があることを前提にしています。
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Reflection; using System.Web; using System.Web.UI; using System.Security.Permissions; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; //This sample code creates a Web Parts control that acts as a provider of table data. namespace Samples.AspNet.CS.Controls { [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] public sealed class TableProviderWebPart : WebPart, IWebPartTable { DataTable _table; public TableProviderWebPart() { _table = new DataTable(); DataColumn col = new DataColumn(); col.DataType = typeof(string); col.ColumnName = "Name"; _table.Columns.Add(col); col = new DataColumn(); col.DataType = typeof(string); col.ColumnName = "Address"; _table.Columns.Add(col); col = new DataColumn(); col.DataType = typeof(int); col.ColumnName = "ZIP Code"; _table.Columns.Add(col); DataRow row = _table.NewRow(); row["Name"] = "John Q. Public"; row["Address"] = "123 Main Street"; row["ZIP Code"] = 98000; _table.Rows.Add(row); } public PropertyDescriptorCollection Schema { get { return TypeDescriptor.GetProperties(_table.DefaultView[0]); } } public void GetTableData(TableCallback callback) { callback(_table.Rows); } public bool ConnectionPointEnabled { get { object o = ViewState["ConnectionPointEnabled"]; return (o != null) ? (bool)o : true; } set { ViewState["ConnectionPointEnabled"] = value; } } [ConnectionProvider("Table", typeof(TableProviderConnectionPoint), AllowsMultipleConnections = true)] public IWebPartTable GetConnectionInterface() { return new TableProviderWebPart(); } public class TableProviderConnectionPoint : ProviderConnectionPoint { public TableProviderConnectionPoint(MethodInfo callbackMethod, Type interfaceType, Type controlType, string name, string id, bool allowsMultipleConnections) : base( callbackMethod, interfaceType, controlType, name, id, allowsMultipleConnections) { } public override bool GetEnabled(Control control) { return ((TableProviderWebPart)control).ConnectionPointEnabled; } } } // This code sample demonstrates a custom WebPart controls that acts as // a consumer in a Web Parts connection. [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] public class TableConsumer : WebPart { private IWebPartTable _provider; private ICollection _tableData; private void GetTableData(object tableData) { _tableData = (ICollection)tableData; } protected override void OnPreRender(EventArgs e) { if (_provider != null) { _provider.GetTableData(new TableCallback(GetTableData)); } } protected override void RenderContents(HtmlTextWriter writer) { if (_provider != null) { PropertyDescriptorCollection props = _provider.Schema; int count = 0; if (props != null && props.Count > 0 && _tableData != null) { foreach (PropertyDescriptor prop in props) { foreach (DataRow o in _tableData) { writer.Write(prop.DisplayName + ": " + o[count]); } writer.WriteBreak(); writer.WriteLine(); count = count + 1; } } else { writer.Write("No data"); } } else { writer.Write("Not connected"); } } [ConnectionConsumer("Table")] public void SetConnectionInterface(IWebPartTable provider) { _provider = provider; } public class TableConsumerConnectionPoint : ConsumerConnectionPoint { public TableConsumerConnectionPoint(MethodInfo callbackMethod, Type interfaceType, Type controlType, string name, string id, bool allowsMultipleConnections) : base( callbackMethod, interfaceType, controlType, name, id, allowsMultipleConnections) { } } } }
コード例の 2 番目の部分は、静的 Web パーツ接続でカスタム コントロールをホストする Web ページです。ページの一番上には、カスタム コントロールのプレフィックスと名前空間を宣言する Register ディレクティブがあります。接続は <asp:webpartconnection> 要素を使用して宣言され、プロバイダ コントロールとコンシューマ コントロールは <asp:webpartzone> 要素内で宣言されます。
<%@ page language="C#" %> <%@ register tagprefix="aspSample" namespace="Samples.AspNet.CS.Controls" %> <html> <head runat="server"> <title>IField Test Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:webpartmanager id="WebPartManager1" runat="server"> <StaticConnections> <asp:WebPartConnection id=wp1 ProviderID=provider1 ConsumerID=consumer1> </asp:WebPartConnection> </StaticConnections> </asp:webpartmanager> <asp:webpartzone id="WebPartZone1" runat="server"> <zoneTemplate> <aspSample:TableProviderWebPart ID=provider1 runat=Server title="Web Parts Table Provider Control" /> <aspSample:TableConsumer ID=consumer1 runat=Server title="Web Parts Table Consumer Control"/> </zoneTemplate> </asp:webpartzone> </div> </form> </body> </html>
ブラウザでページを読み込みます。コントロール間の接続が既に存在し、接続がページ内で静的接続として宣言されているため、コンシューマはプロバイダからのデータを表示します。

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


ProviderConnectionPoint プロパティ

名前 | 説明 | |
---|---|---|
![]() | AllowsMultipleConnections | コネクション ポイントが同時に複数の接続をサポートするかどうかを示す値を取得します。 ( ConnectionPoint から継承されます。) |
![]() | ControlType | コネクション ポイントが関連付けられているサーバー コントロールの Type を取得します。 ( ConnectionPoint から継承されます。) |
![]() | DisplayName | ユーザー インターフェイス (UI) でコネクション ポイントを表す表示名として使用される文字列を取得します。 ( ConnectionPoint から継承されます。) |
![]() | ID | コネクション ポイントの識別子を含む文字列を取得します。 ( ConnectionPoint から継承されます。) |
![]() | InterfaceType | コネクション ポイントによって使用されるインターフェイスの型を取得します。 ( ConnectionPoint から継承されます。) |

ProviderConnectionPoint メソッド

名前 | 説明 | |
---|---|---|
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
![]() | GetEnabled | コネクション ポイントが接続に参加できるかどうかを示す値を取得します。 ( ConnectionPoint から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
![]() | GetObject | コンシューマに返すインターフェイス インスタンスを取得する、プロバイダ コントロールのコールバック メソッドを呼び出します。 |
![]() | GetSecondaryInterfaces | プロバイダ コネクション ポイントによってサポートされるセカンダリ インターフェイスの、オプションのコレクションを取得します。 |
![]() | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |

ProviderConnectionPoint メンバ
プロバイダとして動作するサーバー コントロールがコンシューマとの接続を形成できるようにする、コネクション ポイント オブジェクトを定義します。
ProviderConnectionPoint データ型で公開されるメンバを以下の表に示します。


名前 | 説明 | |
---|---|---|
![]() | AllowsMultipleConnections | コネクション ポイントが同時に複数の接続をサポートするかどうかを示す値を取得します。(ConnectionPoint から継承されます。) |
![]() | ControlType | コネクション ポイントが関連付けられているサーバー コントロールの Type を取得します。(ConnectionPoint から継承されます。) |
![]() | DisplayName | ユーザー インターフェイス (UI) でコネクション ポイントを表す表示名として使用される文字列を取得します。 (ConnectionPoint から継承されます。) |
![]() | ID | コネクション ポイントの識別子を含む文字列を取得します。(ConnectionPoint から継承されます。) |
![]() | InterfaceType | コネクション ポイントによって使用されるインターフェイスの型を取得します。(ConnectionPoint から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
![]() | GetEnabled | コネクション ポイントが接続に参加できるかどうかを示す値を取得します。 (ConnectionPoint から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
![]() | GetObject | コンシューマに返すインターフェイス インスタンスを取得する、プロバイダ コントロールのコールバック メソッドを呼び出します。 |
![]() | GetSecondaryInterfaces | プロバイダ コネクション ポイントによってサポートされるセカンダリ インターフェイスの、オプションのコレクションを取得します。 |
![]() | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |

- ProviderConnectionPointのページへのリンク