ConnectionProviderAttribute クラス
アセンブリ: System.Web (system.web.dll 内)
構文
<AttributeUsageAttribute(AttributeTargets.Method)> _ Public Class ConnectionProviderAttribute Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Method)] public class ConnectionProviderAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Method)] public ref class ConnectionProviderAttribute : public Attribute
Web パーツ接続は、WebPartZoneBase ゾーンにある 2 つのサーバー コントロールによって形成され、これらのサーバー コントロールは、一方のコントロールからもう一方のコントロールに渡されるインターフェイス インスタンスを通じてデータを共有します。インターフェイス インスタンスを提供するコントロールはプロバイダと呼ばれ、インターフェイス インスタンスを受け取ってデータの処理や表示を行うコントロールはコンシューマと呼ばれます。接続の詳細については、WebPartConnection クラスのトピックおよび「Web パーツ接続の概要」を参照してください。
接続におけるプロバイダ コントロールは、WebPart コントロールか、任意の型のサーバー コントロールまたはユーザー コントロールですが、コールバック メソッドとして指定されたメソッドを持っている必要があります。コールバック メソッドは接続プロセス中に呼び出され、データを格納しているインターフェイス インスタンスをコンシューマに返します。プロバイダのコールバック メソッドとして機能するメソッドを指定するには、メソッドに ConnectionProviderAttribute メタデータ要素を追加する必要があります (この要素は、ConnectionProviderAttribute クラスに基づいています)。
ConnectionProviderAttribute オブジェクトを使用すると、プロバイダのコールバック メソッドだけでなく、プロバイダの コネクション ポイントの特定の詳細も指定できます。プロバイダ コネクション ポイントは ProviderConnectionPoint クラスのインスタンスで、接続を確立するために必要なプロバイダに関するすべての詳細をカプセル化します。この詳細には、プロバイダのコントロールの種類、プロバイダが複数のコンシューマに同時に接続できるかどうか、プロバイダがコンシューマに提供するインターフェイス型、コールバック メソッドの詳細、および、ユーザー インターフェイス (UI) でプロバイダ コネクション ポイントを表す表示名が含まれます。すべての Web パーツ接続には、プロバイダ コントロールに関連付けられているプロバイダ コネクション ポイントがあります。
プロバイダのコールバック メソッドに ConnectionProviderAttribute メタデータ要素を追加するときは、これを使用して、プロバイダ コネクション ポイントの詳細も指定できます。この詳細には、コネクション ポイントの表示名 (詳細については、DisplayName プロパティのトピックを参照)、プロバイダが複数のコンシューマに同時に接続できるかどうか (詳細については、AllowsMultipleConnections プロパティのトピックを参照)、コネクション ポイントの ID (詳細については、ID プロパティのトピックを参照)、および、プロバイダが使用するコネクション ポイントの種類 (詳細については、ConnectionPointType プロパティのトピックを参照) が含まれます。ConnectionProviderAttribute クラスのコンストラクタの 4 つのオーバーロードにはそれぞれパラメータがあります。これらのパラメータを使用すると、クラスの新しいインスタンスを作成するときにコネクション ポイントのこれらのプロパティの値を 1 つ以上指定できます。また、プロバイダ コネクション ポイントのプロパティの多くは、プログラムによって設定できます。これらのプロパティは、必要に応じて、ConnectionProviderAttribute 要素を使用して設定できます。
メモ |
---|
プロバイダのコールバック メソッドに ConnectionProviderAttribute メタデータ要素を追加する場合、常に指定する必要がある唯一の必須パラメータは displayName パラメータです (詳細については、ConnectionProviderAttribute(String) コンストラクタ オーバーロードのトピックを参照してください)。このパラメータの値は DisplayName プロパティに割り当てられます。ユーザーが (ConnectionsZone コントロールによって作成される) 接続 UI を開くと、プロバイダ コネクション ポイントを表すこの表示名が UI に表示されます。プロバイダ コントロールで複数のコールバック メソッドを指定した場合は、選択できるコネクション ポイントプロバイダが複数存在することになります。その場合は、各コールバック メソッドに ConnectionProviderAttribute メタデータ要素を追加するときに id パラメータの値も指定して、各プロバイダ コネクション ポイントが既知の一意の識別子を持つようにする必要があります。 |
ConnectionProviderAttribute クラスを使用するコード例を次に示します。この例は、プロバイダ コントロールのコールバック メソッドで ConnectionProviderAttribute メタデータ要素を宣言する方法を示しています。displayName パラメータ値だけが指定された、最も簡単なコンストラクタのオーバーロードが使用されています。
<ConnectionProvider("Row")> _ Public Function GetConnectionInterface() As IWebPartRow Return New RowProviderWebPart() End Function 'GetConnectionInterface
[ConnectionProvider("Row")] public IWebPartRow GetConnectionInterface() { return new RowProviderWebPart(); }
WebPartConnection クラスを使用して、2 つの Web パーツ コントロール間で基本的な静的接続を作成する方法を次のコード例に示します。プロバイダとコンシューマのコード ファイルは、.aspx ページを格納しているアプリケーション フォルダの下の App_Code フォルダに格納する必要があります。
最初の例は、プロバイダとして機能するクラスを示しています。1 つのメソッドが、ConnectionProviderAttribute メタデータ要素を持つコールバック メソッドとして指定されています。
Imports System Imports System.Collections Imports System.ComponentModel Imports System.Data Imports System.Reflection Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.Web.UI.WebControls.WebParts 'This sample code creates a Web Parts control that acts as a provider of row data. Namespace MyCustomWebPart Public NotInheritable Class RowProviderWebPart Inherits WebPart Implements IWebPartRow Private _table As DataTable Public Sub New() _table = New DataTable() Dim col As New DataColumn() col.DataType = GetType(String) col.ColumnName = "Name" _table.Columns.Add(col) col = New DataColumn() col.DataType = GetType(String) col.ColumnName = "Address" _table.Columns.Add(col) col = New DataColumn() col.DataType = GetType(Integer) col.ColumnName = "ZIP Code" _table.Columns.Add(col) Dim row As DataRow = _table.NewRow() row("Name") = "John Q. Public" row("Address") = "123 Main Street" row("ZIP Code") = 98000 _table.Rows.Add(row) End Sub 'New <ConnectionProvider("Row")> _ Public Function GetConnectionInterface() As IWebPartRow Return New RowProviderWebPart() End Function 'GetConnectionInterface Public ReadOnly Property Schema() As PropertyDescriptorCollection _ Implements IWebPartRow.Schema Get Return TypeDescriptor.GetProperties(_table.DefaultView(0)) End Get End Property Public Sub GetRowData(ByVal callback As RowCallback) _ Implements IWebPartRow.GetRowData callback(_table.Rows) End Sub 'GetRowData
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Reflection; using System.Web.UI; 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 row data. namespace My { public sealed class RowProviderWebPart : WebPart, IWebPartRow { private DataTable _table; public RowProviderWebPart() { _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); } [ConnectionProvider("Row")] public IWebPartRow GetConnectionInterface() { return new RowProviderWebPart(); } public PropertyDescriptorCollection Schema { get { return TypeDescriptor.GetProperties(_table.DefaultView[0]); } } public void GetRowData(RowCallback callback) { callback(_table.Rows); } } }
2 番目の例は、コンシューマとして機能するクラスを示しています。
Imports System Imports System.Collections Imports System.ComponentModel Imports System.Data Imports System.Reflection Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.Web.UI.WebControls.WebParts ' This sample code creates a Web Parts control that acts as a consumer of row data. Namespace MyCustomWebPart Public NotInheritable Class RowConsumerWebPart Inherits WebPart Private _provider As IWebPartRow Private _tableData As ICollection Private Sub GetRowData(ByVal rowData As Object) _tableData = CType(rowData, ICollection) End Sub 'GetRowData Protected Overrides Sub OnPreRender(ByVal e As EventArgs) If Not (_provider Is Nothing) Then ' _provider.GetRowData(AddressOf (New RowCallback(GetRowData))) _provider.GetRowData(AddressOf GetRowData) ' _provider.GetRowData(New RowCallback(AddressOf GetRowData)) End If End Sub 'OnPreRender Protected Overrides Sub RenderContents(ByVal writer As HtmlTextWriter) If Not (_provider Is Nothing) Then Dim props As PropertyDescriptorCollection = _provider.Schema Dim count As Integer = 0 If Not (props Is Nothing) AndAlso props.Count > 0 AndAlso Not (_tableData Is Nothing) Then Dim prop As PropertyDescriptor For Each prop In props Dim o As DataRow For Each o In _tableData writer.Write(prop.DisplayName & ": " & o(count)) writer.WriteBreak() writer.WriteLine() count = count + 1 Next o Next prop Else writer.Write("No data") End If Else writer.Write("Not connected") End If End Sub 'RenderContents <ConnectionConsumer("Row")> _ Public Sub SetConnectionInterface(ByVal provider As IWebPartRow) _provider = provider End Sub 'SetConnectionInterface '}
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Reflection; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; // This sample code creates a Web Parts control that acts as a consumer of row data. namespace My { public sealed class RowConsumerWebPart : WebPart { private IWebPartRow _provider; private ICollection _tableData; private void GetRowData(object rowData) { _tableData = (ICollection)rowData; } protected override void OnPreRender(EventArgs e) { if (_provider != null) { _provider.GetRowData(new RowCallback(GetRowData)); } } 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("Row")] public void SetConnectionInterface(IWebPartRow provider) { _provider = provider; } } } //}
最後の例は、2 つのコントロールを含む ASP.NET ページを示しています。
<%@ page language="VB" %> <%@ Register TagPrefix=my Namespace=MyCustomWebPart %> <html> <head runat="server"> <title>IRow Test Page</title> </head> <body> <form id="form1" runat="server"> <div> <!-- A static or dynamic connection is required to link two Web Parts controls. ---> <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> <my:RowProviderWebPart ID=provider1 runat=server Title="Row Provider Control" /> <my:RowConsumerWebPart ID=consumer1 runat=server Title="Row Consumer Control" /> </ZoneTemplate> </asp:webpartzone> </div> </form> </body> </html>
<%@ page language="C#" %> <%@ register TagPrefix="my" Namespace="My" %> <html> <head runat="server"> <title>IRow Test Page</title> </head> <body> <form id="form1" runat="server"> <div> <!-- A static or dynamic connection is required to link two Web Parts controls. ---> <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> <!-- The following two lines specify the two connected controls. ---> <my:RowProviderWebPart ID=provider1 runat=server Title="Row Provider Control" /> <my:RowConsumerWebPart ID=consumer1 runat=server Title="Row Consumer Control" /> </ZoneTemplate> </asp:webpartzone> </div> </form> </body> </html>
System.Attribute
System.Web.UI.WebControls.WebParts.ConnectionProviderAttribute
プラットフォーム
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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
参照
ConnectionProviderAttribute メンバ
System.Web.UI.WebControls.WebParts 名前空間
WebPartConnection
ConnectionPoint クラス
ProviderConnectionPoint
ConnectionConsumerAttribute クラス
その他の技術情報
ASP.NET Web パーツ ページ
Web パーツ ページの保護
Web パーツ接続の概要
- ConnectionProviderAttribute クラスのページへのリンク