IWebPartRowとは? わかりやすく解説

IWebPartRow インターフェイス

メモ : このインターフェイスは、.NET Framework version 2.0 で新しく追加されたものです。

データの単一のフィールドを使用して、2 つのサーバー コントロールを接続するためのプロバイダ インターフェイスを定義します。

名前空間: System.Web.UI.WebControls.WebParts
アセンブリ: 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 つの部分で構成されます。

コード例の最初の部分は、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 インターフェイスのインスタンスを通じてプロバイダが使用できるようにした、指定の行から取得したデータを表示します。

.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
IWebPartRow メンバ
System.Web.UI.WebControls.WebParts 名前空間
WebPartConnection
IWebPartField インターフェイス
IWebPartTable
その他の技術情報
ASP.NET Web パーツ ページ
Web パーツ接続の概要

IWebPartRow プロパティ


パブリック プロパティパブリック プロパティ

参照参照

関連項目

IWebPartRow インターフェイス
System.Web.UI.WebControls.WebParts 名前空間
WebPartConnection
IWebPartField インターフェイス
IWebPartTable

その他の技術情報

ASP.NET Web パーツ ページ
Web パーツ接続の概要

IWebPartRow メソッド


パブリック メソッドパブリック メソッド

参照参照

関連項目

IWebPartRow インターフェイス
System.Web.UI.WebControls.WebParts 名前空間
WebPartConnection
IWebPartField インターフェイス
IWebPartTable

その他の技術情報

ASP.NET Web パーツ ページ
Web パーツ接続の概要

IWebPartRow メンバ




英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

「IWebPartRow」の関連用語

IWebPartRowのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



IWebPartRowのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS