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


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

IWebPartRow インターフェイスを使用して、2 つのコントロール間で静的接続を作成する方法を次のコード例に示します。コード例は、次の 3 つの部分で構成されます。
-
IWebPartRow インターフェイスを使用して接続を構成できる、2 つのカスタム WebPart コントロール (1 つはプロバイダとして動作し、もう 1 つはコンシューマとして動作) 用のソース コード。
コード例の最初の部分は、2 つのカスタム コントロールのソース コードです。1 番目は、IWebPartRow インターフェイスを実装するプロバイダ用のコードです。コード例を簡略化するために、プロバイダはデータベースに接続する代わりにいくつかのデータを含むテーブルを作成します。GetConnectionInterface メソッドはコンシューマにインターフェイス インスタンスを返すコールバック メソッドであり、プロバイダのコネクション ポイントとして機能します。コンシューマは、SetConnectionInterface という名前のメソッドで、ConnectionConsumer 属性でマークされたプロバイダからインターフェイス インスタンスを取得します。インターフェイスのインスタンスを取得した後、コンシューマは OnPreRender メソッドでプロバイダの GetRowData メソッドの実装を呼び出し、実際のデータを取得してページに書き込みます。
コード例を実行するためには、このソース コードをコンパイルする必要があります。それを明示的にコンパイルし、コンパイル済みのアセンブリを 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 row data. <AspNetHostingPermission(SecurityAction.Demand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ <AspNetHostingPermission(SecurityAction.InheritanceDemand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ 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 _ ComponentModel.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 End Class 'RowProviderWebPart ' This sample code creates a Web Parts control that acts as a consumer ' of row data. <AspNetHostingPermission(SecurityAction.Demand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ <AspNetHostingPermission(SecurityAction.InheritanceDemand, _ Level:=AspNetHostingPermissionLevel.Minimal)> _ 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 Protected Overrides Sub OnPreRender(ByVal e As EventArgs) If Not (_provider Is Nothing) Then _provider.GetRowData(New RowCallback(AddressOf GetRowData)) End If End Sub 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 <ConnectionConsumer("Row")> _ Public Sub SetConnectionInterface(ByVal provider As IWebPartRow) _provider = provider End Sub End Class 'RowConsumerWebPart 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 row data. [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] 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); } } // RowProviderWebPart // This sample code creates a Web Parts control that acts as a consumer // of row data. [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] 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; } } // RowConsumerWebPart } // Samples.AspNet.CS.Controls
コード例の 2 番目の部分は、静的接続を宣言してコントロールをホストする Web ページです。ページの先頭付近にあるのは、App_Code ディレクトリ内に格納されたソース コードの名前空間を宣言する Register ディレクティブです。接続は、<asp:webpartconnection> 要素を使用して宣言されます。カスタムのコンシューマ コントロールとプロバイダ コントロールは、<asp:webpartzone> 要素内の <zonetemplate> 要素で宣言されます。この要素は、コントロールを接続できるようにするために必要です (これらは WebPartZoneBase クラスから継承したゾーン内に存在する必要があります)。
<%@ page language="VB" %> <%@ Register tagprefix="IRow" 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"> <html > <head runat="server"> <title>IRow 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> <irow:RowProviderWebPart ID="provider1" runat="server" Title="Row Provider Control" /> <irow:RowConsumerWebPart ID="consumer1" runat="server" Title="Row Consumer Control" /> </ZoneTemplate> </asp:webpartzone> </div> </form> </body> </html>
<%@ page language="C#" %> <%@ Register tagprefix="IRow" 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"> <html > <head runat="server"> <title>IRow 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> <irow:RowProviderWebPart ID="provider1" runat="server" Title="Row Provider Control" /> <irow:RowConsumerWebPart ID="consumer1" runat="server" Title="Row Consumer Control" /> </ZoneTemplate> </asp:webpartzone> </div> </form> </body> </html>
ブラウザにページを読み込みます。コンシューマ コントロールは、IWebPartRow インターフェイスのインスタンスを通じてプロバイダが使用できるようにした、指定の行から取得したデータを表示します。


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


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

- IWebPartRowのページへのリンク