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

IWebPartTable インターフェイス

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

データ テーブル全体を使用して 2 つのサーバー コントロールを接続するためのプロバイダ インターフェイスを定義します。

名前空間: System.Web.UI.WebControls.WebParts
アセンブリ: System.Web (system.web.dll 内)
構文構文

Dim instance As IWebPartTable
public interface IWebPartTable
public interface class IWebPartTable
public interface IWebPartTable
public interface IWebPartTable
解説解説

このインターフェイスは、Web パーツ接続での使用を意図してデザインされています。Web パーツ接続では、WebPartZoneBase ゾーン内にある 2 つのサーバー コントロールが接続を確立し、データを共有します。その際、一方のコントロールがコンシューマとして機能し、もう一方のコントロールがプロバイダとして機能します。Web パーツ接続でデータを共有するための機構はインターフェイス インスタンスで、プロバイダからコールバック メソッドによってコンシューマに提供されます。接続を確立するためには、コンシューマとプロバイダの両方が、データ共有のための同じインターフェイス型に対応している必要があります。プロバイダから送信されたインターフェイス型をコンシューマが認識しない場合でも、プロバイダから送信されたインターフェイス インスタンスをコンシューマが認識する型に変換するトランスフォーマ (WebPartTransformer オブジェクト) により、コントロールを接続できます。接続の詳細については、「WebPartConnection」および「Web パーツ接続の概要」を参照してください。

IWebPartTable インターフェイスは、データ テーブルに基づいて接続を作成するための標準のインターフェイスとして Web パーツ コントロール セットに含まれる、プロバイダ インターフェイスです。カスタムのインターフェイスを作成して Web パーツ接続に使用することもできますが、多くのデータ ドリブン Web アプリケーションでは、共通のフィールド (詳細については、IWebPartField インターフェイスのトピックを参照)、データ (詳細については、IWebPartRow インターフェイスのトピックを参照)、またはデータ ソースのテーブルに基づく接続を作成すると便利です。一般的な接続では、プロバイダとして機能する WebPart コントロールが IWebPartTable インターフェイスを実装し、このインターフェイスのインスタンスを、特殊なコールバック メソッドによってコンシューマに提供します。たとえば、プロバイダが、財務実績データが格納されているテーブルの IWebPartTable インターフェイスを実装しているとします。コンシューマとして機能する別の WebPart コントロールは、このインターフェイス インスタンスを受け取る特殊なメソッドを定義し、データを抽出してグラフをレンダリングし、結果として得られた情報を表示できます。

IWebPartTable インターフェイスには 2 つの公開されたメンバがあります。Schema プロパティは、PropertyDescriptorCollection オブジェクトにカプセル化されているデータ テーブルに関するスキーマ情報を返します。GetTableData メソッドは、コールバック メソッドが呼び出されるときに、インターフェイス インスタンスのテーブル データを取得するために実装側 (プロバイダ コントロールなど) が使用するメソッドを宣言します。

使用例使用例

IWebPartTable インターフェイスを使用して、2 つのコントロール間で静的接続を作成する方法を次のコード例に示します。コード例は、次の 3 つの部分から成ります。

コード例の最初の部分は、2 つのカスタム コントロールのソース コードです。最初のコードは、IWebPartTable インターフェイスを実装するプロバイダのコードです。例を簡略化するために、プロバイダはデータベースに接続するのではなく、いくつかのデータを格納するテーブルを作成しています。GetConnectionInterface メソッドは、コンシューマにインターフェイス インスタンスを返すコールバック メソッドである、プロバイダのコネクション ポイントとして機能します。コンシューマは、ConnectionConsumer 属性でマークされている SetConnectionInterface という名前のメソッド内で、プロバイダからのインターフェイス インスタンスを取得します。インターフェイスのインスタンスを取得した後、コンシューマは、その OnPreRender メソッド内でプロバイダの GetTableData メソッドの実装を呼び出し、実際のデータを取得してそれをページに書き込みます。

コード例を実行するためには、このソース コードをコンパイルする必要があります。それを明示的にコンパイルし、コンパイル済みのアセンブリを 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 table data.
  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public NotInheritable Class
 TableProviderWebPart
    Inherits WebPart
    Implements IWebPartTable
    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


    Public ReadOnly Property
 Schema() As _
      ComponentModel.PropertyDescriptorCollection Implements IWebPartTable.Schema

      Get
        Return TypeDescriptor.GetProperties(_table.DefaultView(0))
      End Get

    End Property


    Public Sub GetTableData(ByVal
 callback As TableCallback) _
      Implements IWebPartTable.GetTableData

      callback(_table.Rows)

    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


    <ConnectionProvider("Table", GetType(TableProviderConnectionPoint),
 _
      AllowsMultipleConnections:=True)> _
    Public Function GetConnectionInterface()
 As IWebPartTable

      Return New TableProviderWebPart()

    End Function

  End Class 'TableProviderWebPart

  ' The connection point for the provider control.
  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class TableProviderConnectionPoint
    Inherits ProviderConnectionPoint

    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, TableProviderWebPart).ConnectionPointEnabled

    End Function
  End Class


  ' This code sample creates a Web Parts control that acts as a consumer
 
  ' of information provided by the TableProvider.ascx control.
  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class TableConsumer
    Inherits WebPart
    Private _provider As IWebPartTable
    Private _tableData As ICollection


    Private Sub GetTableData(ByVal
 tableData As ICollection)
      _tableData = CType(tableData, ICollection)

    End Sub


    Protected Overrides Sub
 OnPreRender(ByVal e As EventArgs)
      If Not (_provider Is
 Nothing) Then
        _provider.GetTableData(New TableCallback(AddressOf
 GetTableData))
      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))
            Next o
            writer.WriteBreak()
            writer.WriteLine()
            count = count + 1
          Next prop
        Else
          writer.Write("No data")
        End If
      Else
        writer.Write("Not connected")
      End If

    End Sub


    <ConnectionConsumer("Table")> _
    Public Sub SetConnectionInterface(ByVal
 provider As IWebPartTable)
      _provider = provider

    End Sub

  End Class 'TableConsumer

  ' The connection point for the consumer control.
  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class TableConsumerConnectionPoint
    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
  End Class 'TableConsumerConnectionPoint

End Namespace  ' Samples.AspNet.CS.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 table data.
  [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 creates a Web Parts control that acts as a consumer
 
  // of information provided by the TableProvider.ascx control.
  [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)
      {
      }

    } // TableConsumerConnectionPoint

  } // TableConsumer

} // 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>

ブラウザにページを読み込みます。コンシューマ コントロールは、プロバイダが IWebPartTable インターフェイスのインスタンスを通じて提供する、特定のテーブルからのデータを表示します。

.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

IWebPartTable プロパティ


IWebPartTable メソッド


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

参照参照

関連項目

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

その他の技術情報

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

IWebPartTable メンバ




英和和英テキスト翻訳

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

辞書ショートカット

すべての辞書の索引

「IWebPartTable」の関連用語

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

   

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



IWebPartTableのページの著作権

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

©2026 GRAS Group, Inc.RSS