IWebPartField インターフェイス
アセンブリ: System.Web (system.web.dll 内)


このインターフェイスは、Web パーツ接続での使用を意図してデザインされています。Web パーツ接続では、WebPartZoneBase ゾーン内にある 2 つのサーバー コントロールが接続を確立し、データを共有します。その際、一方のコントロールがコンシューマとして機能し、もう一方のコントロールがプロバイダとして機能します。Web パーツ接続でデータを共有するための機構はインターフェイス インスタンスで、プロバイダからコールバック メソッドによってコンシューマに提供されます。接続を確立するためには、コンシューマとプロバイダの両方が、データ共有のための同じインターフェイス型に対応している必要があります。プロバイダから送信されたインターフェイス型をコンシューマが認識しない場合でも、プロバイダから送信されたインターフェイス インスタンスをコンシューマが認識する型に変換するトランスフォーマ (WebPartTransformer オブジェクト) により、コントロールを接続できます。接続の詳細については、「WebPartConnection」および「Web パーツ接続の概要」を参照してください。
IWebPartField インターフェイスは、データ フィールドに基づいて接続を作成するための標準のインターフェイスとして Web パーツ コントロール セットに含まれる、プロバイダ インターフェイスです。カスタムのインターフェイスを作成して Web パーツ接続に使用することもできますが、多くのデータ ドリブン Web アプリケーションでは、IWebPartField インターフェイスを使用して、共通の行 (詳細については、IWebPartRow インターフェイスのトピックを参照)、テーブル (詳細については、IWebPartTable インターフェイスのトピックを参照)、またはデータ ソースのフィールドに基づく接続を作成すると便利です。一般的な接続では、プロバイダとして機能する WebPart コントロールが IWebPartField インターフェイスを実装し、このインターフェイスのインスタンスを、特殊なコールバック メソッドによってコンシューマに提供します。たとえば、プロバイダが、Web ユーザーの郵便番号データが格納されているユーザー情報テーブル内のフィールドの IWebPartField インターフェイスを実装しているとします。コンシューマとして機能する別の WebPart コントロールは、このインターフェイス インスタンスを受け取る特殊なメソッドを定義し、郵便番号データを抽出し、郵便番号に基づく気象情報を検索して表示できます。
IWebPartField インターフェイスには 2 つの公開されたメンバがあります。Schema プロパティは、PropertyDescriptor オブジェクトにカプセル化されているデータ フィールドに関するスキーマ情報を返します。GetFieldValue メソッドは、コールバック メソッドが呼び出されるときに、インターフェイス インスタンスのフィールド データを取得するために実装側 (プロバイダ コントロールなど) が使用するメソッドを宣言します。

IWebPartField インターフェイスを使用して、2 つのコントロール間で静的接続を作成する方法を次のコード例に示します。コード例は、次の 3 つの部分から成ります。
-
IWebPartField インターフェイスを使用して接続を形成する、2 つのカスタム WebPart コントロール。一方のコントロールはプロバイダとして機能し、もう一方のコントロールはコンシューマとして機能します。
コード例の最初の部分は、2 つのカスタム コントロールのソース コードです。最初のコードは、IWebPartField インターフェイスを実装するプロバイダのコードです。例を簡略化するために、プロバイダはデータベースに接続するのではなく、いくつかのデータを格納するテーブルを作成しています。GetConnectionInterface メソッドは、コンシューマにインターフェイス インスタンスを返すコールバック メソッドである、プロバイダのコネクション ポイントとして機能します。コンシューマは、ConnectionConsumer 属性でマークされている SetConnectionInterface という名前のメソッド内で、プロバイダからのインターフェイス インスタンスを取得します。インターフェイスのインスタンスを取得した後、コンシューマは、その OnPreRender メソッド内でプロバイダの GetFieldValue メソッドの実装を呼び出し、実際のデータを取得します。
コード例を実行するためには、このソース コードをコンパイルする必要があります。それを明示的にコンパイルし、コンパイル済みのアセンブリを Web サイトの Bin フォルダまたはグローバル アセンブリ キャッシュに配置できます。サイトの App_Code フォルダにソース コードを配置し、実行時に動的にコンパイルすることもできます。このコード例は、動的コンパイルを使用します。コンパイル方法を示すチュートリアルについては、「チュートリアル : カスタム サーバー コントロールの開発と使用」を参照してください。
Imports System Imports System.Collections Imports System.ComponentModel Imports System.Data Imports System.Reflection Imports System.Security.Permissions Imports System.Web Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.Web.UI.WebControls.WebParts Namespace Samples.AspNet.VB.Controls ' This sample code creates a Web Parts control that acts as a ' provider of field data. <AspNetHostingPermission(SecurityAction.Demand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ <AspNetHostingPermission(SecurityAction.InheritanceDemand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ Public NotInheritable Class FieldProviderWebPart Inherits WebPart Implements IWebPartField 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 <ConnectionProvider("FieldProvider")> _ Public Function GetConnectionInterface() As IWebPartField Return New FieldProviderWebPart() End Function Public ReadOnly Property Schema() As ComponentModel.PropertyDescriptor _ Implements IWebPartField.Schema Get ' The two parameters are row and field. Zero is the first record. ' 0,2 returns the zip code field value. Return TypeDescriptor.GetProperties(_table.DefaultView(0))(2) End Get End Property Sub GetFieldValue(ByVal callback As FieldCallback) _ Implements IWebPartField.GetFieldValue callback(Schema.GetValue(_table.DefaultView(0))) End Sub End Class 'FieldProviderWebPart ' This sample code creates a Web Parts control that acts as a ' consumer of an IWebPartField interface. <AspNetHostingPermission(SecurityAction.Demand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ <AspNetHostingPermission(SecurityAction.InheritanceDemand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ Public Class FieldConsumerWebPart Inherits WebPart Private _provider As IWebPartField Private _fieldValue As Object Private Sub GetFieldValue(ByVal fieldValue As Object) _fieldValue = fieldValue End Sub Public Property ConnectionPointEnabled() As Boolean Get Dim o As Object = ViewState("ConnectionPointEnabled") Return IIf(Not (o Is Nothing), CBool(o), True) End Get Set(ByVal value As Boolean) ViewState("ConnectionPointEnabled") = value End Set End Property Protected Overrides Sub OnPreRender(ByVal e As EventArgs) If Not (_provider Is Nothing) Then _provider.GetFieldValue(New FieldCallback(AddressOf GetFieldValue)) End If MyBase.OnPreRender(e) End Sub Protected Overrides Sub RenderContents(ByVal writer As _ HtmlTextWriter) If Not (_provider Is Nothing) Then Dim prop As PropertyDescriptor = _provider.Schema If Not (prop Is Nothing) AndAlso Not (_fieldValue Is Nothing) Then writer.Write(prop.DisplayName & ": " & _fieldValue) Else writer.Write("No data") End If Else writer.Write("Not connected") End If End Sub <ConnectionConsumer("FieldConsumer", "Connpoint1", _ GetType(FieldConsumerConnectionPoint), AllowsMultipleConnections:=True)> _ Public Sub SetConnectionInterface(ByVal provider As IWebPartField) _provider = provider End Sub End Class 'FieldConsumerWebPart Public Class FieldConsumerConnectionPoint Inherits ConsumerConnectionPoint Public Sub New(ByVal callbackMethod As MethodInfo, _ ByVal interfaceType As Type, ByVal controlType As Type, _ ByVal name As String, ByVal id As String, _ ByVal allowsMultipleConnections As Boolean) MyBase.New(callbackMethod, interfaceType, controlType, _ name, id, allowsMultipleConnections) End Sub Public Overrides Function GetEnabled(ByVal control As Control) _ As Boolean Return CType(control, FieldConsumerWebPart).ConnectionPointEnabled End Function End Class 'FieldConsumerConnectionPoint End Namespace ' Samples.AspNet.VB.Controls
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Reflection; using System.Security.Permissions; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; namespace Samples.AspNet.CS.Controls { // This sample code creates a Web Parts control that acts as a provider // of field data. [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] public sealed class FieldProviderWebPart : WebPart, IWebPartField { private DataTable _table; public FieldProviderWebPart() { _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("FieldProvider")] public IWebPartField GetConnectionInterface() { return new FieldProviderWebPart(); } public PropertyDescriptor Schema { get { /* The two parameters are row and field. Zero is the first record. 0,2 returns the zip code field value. */ return TypeDescriptor.GetProperties(_table.DefaultView[0])[2]; } } void IWebPartField.GetFieldValue(FieldCallback callback) { callback(Schema.GetValue(_table.DefaultView[0])); } } // end FieldProviderWebPart // This sample code creates a Web Parts control that acts as a consumer // of an IWebPartField interface. [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] public class FieldConsumerWebPart : WebPart { private IWebPartField _provider; private object _fieldValue; private void GetFieldValue(object fieldValue) { _fieldValue = fieldValue; } public bool ConnectionPointEnabled { get { object o = ViewState["ConnectionPointEnabled"]; return (o != null) ? (bool)o : true; } set { ViewState["ConnectionPointEnabled"] = value; } } protected override void OnPreRender(EventArgs e) { if (_provider != null) { _provider.GetFieldValue(new FieldCallback(GetFieldValue)); } base.OnPreRender(e); } protected override void RenderContents(HtmlTextWriter writer) { if (_provider != null) { PropertyDescriptor prop = _provider.Schema; if (prop != null && _fieldValue != null) { writer.Write(prop.DisplayName + ": " + _fieldValue); } else { writer.Write("No data"); } } else { writer.Write("Not connected"); } } [ConnectionConsumer("FieldConsumer", "Connpoint1", typeof(FieldConsumerConnectionPoint), AllowsMultipleConnections = true)] public void SetConnectionInterface(IWebPartField provider) { _provider = provider; } public class FieldConsumerConnectionPoint : ConsumerConnectionPoint { public FieldConsumerConnectionPoint(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 ((FieldConsumerWebPart)control).ConnectionPointEnabled; } } // end FieldConsumerConnectionPoint } // end FieldConsumerWebPart } // end namespace Samples.AspNet.CS.Controls
コード例の 2 番目の部分は、静的接続を宣言し、コントロールをホストする Web ページです。ページの上部には、App_Code ディレクトリに格納されているソース コードの名前空間を宣言する Register ディレクティブが含まれています。接続は、<asp:webpartconnection> 要素を使用して宣言されます。カスタム コンシューマ コントロールとカスタム プロバイダ コントロールは、<asp:webpartzone> 要素内の <zonetemplate> 要素で宣言されています。これは、これらのコントロールを接続できるようにするために必要な要素です (これらのコントロールは、WebPartZoneBase クラスから継承されるゾーンに配置されている必要があります)。
<%@ page language="VB" debug="true" %> <%@ Register tagprefix="IField" 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"> <!-- This code sample creates a page with two Web Parts controls and establishes a connection between the controls. --> <script runat="server"> </script> <html > <head runat="server"> <title>IWebPartField Test Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:webpartmanager id="WebPartManager1" runat="server"> <StaticConnections> <asp:WebPartConnection id="con1" ProviderID="provider1" ConsumerID="consumer1" ConsumerConnectionPointID="Connpoint1"> </asp:WebPartConnection> </StaticConnections> </asp:webpartmanager> <asp:webpartzone id="WebPartZone1" runat="server"> <zoneTemplate> <ifield:fieldproviderwebpart runat="Server" ID="provider1" Title="Provider" /> <ifield:fieldconsumerwebpart runat="Server" ID="consumer1" Title="Consumer"/> </zoneTemplate> </asp:webpartzone> </div> </form> </body> </html>
<%@ page language="C#" %> <%@ Register tagprefix="IField" 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"> <!-- This code sample creates a page with two Web Parts controls and establishes a connection between the controls. --> <script runat="server"> </script> <html > <head runat="server"> <title>IWebPartField Test Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:webpartmanager id="WebPartManager1" runat="server"> <StaticConnections> <asp:WebPartConnection id="con1" ProviderID="provider1" ConsumerID="consumer1" ConsumerConnectionPointID="Connpoint1"> </asp:WebPartConnection> </StaticConnections> </asp:webpartmanager> <asp:webpartzone id="WebPartZone1" runat="server"> <zoneTemplate> <ifield:fieldproviderwebpart runat="Server" ID="provider1" Title="Provider" /> <ifield:fieldconsumerwebpart runat="Server" ID="consumer1" Title="Consumer"/> </zoneTemplate> </asp:webpartzone> </div> </form> </body> </html>
ブラウザにページを読み込みます。コンシューマ コントロールは、プロバイダが IWebPartField インターフェイスのインスタンスを通じて提供する、特定のフィールドからのデータを表示します。


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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


IWebPartField プロパティ
IWebPartField メソッド
IWebPartField メンバ
Weblioに収録されているすべての辞書からIWebPartFieldを検索する場合は、下記のリンクをクリックしてください。

- IWebPartFieldのページへのリンク