WebPartTransformer クラス

定義

互換性のない 2 つの接続ポイント間でデータを変換するトランスフォーマー クラスの基本的な実装を提供します。

public ref class WebPartTransformer abstract
public abstract class WebPartTransformer
type WebPartTransformer = class
Public MustInherit Class WebPartTransformer
継承
WebPartTransformer
派生

次のコード例では、 WebPartTransformer クラスから派生するカスタマイズされたトランスフォーマーを作成する方法を示します。 RowToStringTransformerという名前のトランスフォーマーを使用すると、互換性のない接続ポイントを持つ Web パーツ プロバイダーと Web パーツ コンシューマーを接続できます。 プロバイダーは IWebPartRow型のデータを提示しますが、コンシューマーは String型のデータのみを受け入れます。 RowToStringTransformer クラスは、必要な変換を実行します。

このコード例には、プロバイダーまたはコンシューマーの実装は含まれていません。 IWebPartRow インターフェイスを実装するプロバイダーと、IStringという名前のカスタマイズされたインターフェイスを介してデータを期待するコンシューマーを作成して、この例を動作させる必要があります。

// An interface that the transformer provides to the consumer.
[AspNetHostingPermission(SecurityAction.Demand,
  Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
  Level = AspNetHostingPermissionLevel.Minimal)]
public interface IString
{
    void GetStringValue(StringCallback callback);
}
' An interface that the transformer provides to the consumer.
<AspNetHostingPermission(SecurityAction.Demand, _
   Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
   Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Interface IString
    Sub GetStringValue(ByVal callback As StringCallback)
End Interface

コード例の最初のセクションには、プロバイダーおよびコンシューマー Web パーツ コントロールのコードと、トランスフォーマーのコードが含まれています。

// A transformer that transforms a row to a string.
[AspNetHostingPermission(SecurityAction.Demand,
  Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
  Level = AspNetHostingPermissionLevel.Minimal)]
[WebPartTransformer(typeof(IWebPartRow), typeof(IString))]
public class RowToStringTransformer : WebPartTransformer, IString
{

    private IWebPartRow _provider;
    private StringCallback _callback;

    private void GetRowData(object rowData)
    {
        PropertyDescriptorCollection props = _provider.Schema;
        if (props != null && props.Count > 0 && rowData != null)
        {
            string returnValue = String.Empty;
            foreach (PropertyDescriptor prop in props)
            {
                if (prop != props[0])
                {
                    returnValue += ", ";
                }
                returnValue += prop.DisplayName + ": " + prop.GetValue(rowData);
            }
            _callback(returnValue);
        }
        else
        {
            _callback(null);
        }
    }
    
    public override object Transform(object providerData)
    {
        _provider = (IWebPartRow)providerData;
        return this;
    }

    void IString.GetStringValue(StringCallback callback)
    {
        if (callback == null)
        {
            throw new ArgumentNullException("callback");
        }

        if (_provider != null)
        {
            _callback = callback;
            _provider.GetRowData(new RowCallback(GetRowData));
        }
        else
        {
            callback(null);
        }
    }
}
' A transformer that transforms a row to a string.
<AspNetHostingPermission(SecurityAction.Demand, _
   Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
   Level:=AspNetHostingPermissionLevel.Minimal)> _
<WebPartTransformer(GetType(IWebPartRow), GetType(IString))> _
Public Class RowToStringTransformer
    Inherits WebPartTransformer
    Implements IString

    Private _provider As IWebPartRow
    Private _callback As StringCallback

    Private Sub GetRowData(ByVal rowData As Object)
        Dim props As PropertyDescriptorCollection = _provider.Schema

        If ((Not (props Is Nothing)) AndAlso (props.Count > 0) _
          AndAlso (Not (rowData Is Nothing))) Then
            Dim returnValue As String = String.Empty
            For Each prop As PropertyDescriptor In props
                If Not (prop Is props(0)) Then
                    returnValue += ", "
                End If
                returnValue += prop.DisplayName.ToString() + ": " + _
                    prop.GetValue(rowData).ToString()
            Next
            _callback(returnValue)
        Else
            _callback(Nothing)
        End If
    End Sub

    Public Overrides Function Transform(ByVal providerData As Object) As Object
        _provider = CType(providerData, IWebPartRow)
        Return Me
    End Function


    Sub GetStringValue(ByVal callback As StringCallback) _
       Implements IString.GetStringValue
        If (callback Is Nothing) Then
            Throw New ArgumentNullException("callback")
        End If

        If (Not (_provider Is Nothing)) Then
            _callback = callback
            _provider.GetRowData(New RowCallback(AddressOf GetRowData))
        Else
            callback(Nothing)
        End If
    End Sub
End Class

コード例の 2 番目のセクションでは、 WebPartConnection オブジェクトの宣言構文内にトランスフォーマーを含める方法を示します。

<%@ Page language="c#" trace="false" debug="true" %> 
<%@ register tagprefix="uc1" 
    tagname="DisplayModeMenuCS" 
    src="~/displaymodemenucs.ascx" %>
<%@ Register TagPrefix="wp" 
    NameSpace="Samples.AspNet.CS.Controls" %>

<script runat="server">

</script>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Web Parts Transformer Sample Page</title>
</head>
<body>
<form id="Form1" runat="server">

<asp:webpartmanager id="manager" runat="server">
  <staticconnections>
    <asp:webpartconnection id="conn1" providerid="p1" consumerid="c1">
      <wp:rowtostringtransformer />
    </asp:webpartconnection>
  </staticconnections>
</asp:webpartmanager>
<uc1:displaymodemenucs id="menu1" runat="server" />

<table>
<tr valign="top">
  <td>
  <asp:webpartzone id="zone1" headertext="zone1" runat="server">
    <zonetemplate>
      <wp:rowproviderwebpart id="p1" runat="server" />
      <wp:stringconsumerwebpart id="c1" runat="server" />
    </zonetemplate>
  </asp:webpartzone>
  </td>
  <td>
  <asp:connectionszone id="connectionszone1" runat="server" />
  </td>
</tr>
</table>

</form>
</body>
</html>
<%@ Page Language="VB" %>
<%@ register tagprefix="uc1" 
    tagname="DisplayModeMenuVB" 
    src="~/displaymodemenuvb.ascx" %>
<%@ Register TagPrefix="wp" 
    NameSpace="Samples.AspNet.VB.Controls" %>

<script runat="server">

</script>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Web Parts Transformers Sample Page</title>
</head>
<body>
<form id="Form1" runat="server">

<asp:webpartmanager id="manager" runat="server">
  <staticconnections>
    <asp:webpartconnection id="conn1" providerid="p1" consumerid="c1">
      <wp:rowtostringtransformer />
    </asp:webpartconnection>
  </staticconnections>
</asp:webpartmanager>
<uc1:displaymodemenuvb id="menu1" runat="server" />

<table>
<tr valign="top">
  <td>
  <asp:webpartzone id="zone1" headertext="zone1" runat="server">
    <zonetemplate>
      <wp:rowproviderwebpart id="p1" runat="server" />
      <wp:stringconsumerwebpart id="c1" runat="server" />
    </zonetemplate>
  </asp:webpartzone>
  </td>
  <td>
  <asp:connectionszone id="connectionszone1" runat="server" />
  </td>
</tr>
</table>

</form>
</body>
</html>

Web ページで使用できるようにするには、Web.config ファイルの <transformers> セクションで、カスタマイズされたトランスフォーマーを指定する必要があります。 コード例の 3 番目のセクションでは、カスタマイズしたトランスフォーマーを Web.config ファイルに追加する方法を示します。

<webParts enableExport="true">
    <transformers>
       <add name="RowToStringTransformer"
          type="Samples.AspNet.VB.Controls.RowToStringTransformer" />
    </transformers>
</webParts>
<webParts enableExport="true">
    <transformers>
       <add name="RowToStringTransformer"
          type="Samples.AspNet.CS.Controls.RowToStringTransformer" />
    </transformers>
</webParts>

このコード例には、Web パーツ ページの表示モードを変更できるユーザー コントロールが含まれています。 ユーザー コントロールのソース コードは、別のトピックから取得されます。 ユーザー コントロールの .ascx ファイルは、「 チュートリアル: Web パーツ ページでの表示モードの変更」から取得でき、.aspx ページと同じフォルダーに配置する必要があります。

注釈

トランスフォーマーは、互換性のない接続ポイントを持つ 2 つの Web パーツ コントロール間でデータを変換するために使用されます。 接続ポイントは、異なるインターフェイスを介してデータを提供または使用する場合、互換性がありません。 たとえば、 IWebPartRow 型のプロバイダー接続ポイントを実装しているプロバイダーは、 IWebPartTable型のプロバイダー接続ポイントを必要としているコンシューマーに直接接続できませんでした。 代わりに、トランスフォーマーを使用して 2 つの Web パーツ コントロールを接続する必要があります。

トランスフォーマーは、プロバイダー接続ポイントでサポートされている型のデータを受け入れます。 コンシューマー接続ポイントでサポートされている型にそのデータを変換するために必要な内部処理を行います。

トランスフォーマーは、ユーザーが接続モードのときにトランスフォーマーを構成できるようにするユーザー インターフェイス (UI) を提供できます。 構成コントロールは、 CreateConfigurationControl メソッドを使用して取得され、Web パーツ接続ゾーンに表示されます。

WebPartTransformer は抽象クラスであり、さまざまな種類のコネクション ポイント間でカスタマイズされた翻訳を提供するために拡張する必要があります。

注意 (実装者)

Transform(Object) メソッドをオーバーライドする必要があります。

コンストラクター

名前 説明
WebPartTransformer()

WebPartTransformer クラスの新しいインスタンスを初期化します。

メソッド

名前 説明
CreateConfigurationControl()

ConnectionsZone ゾーンでトランスフォーマーを構成する ASP.NET コントロールを表示します。

Equals(Object)

指定したオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
LoadConfigurationState(Object)

SaveConfigurationState() メソッドで保存された構成状態を読み込みます。

MemberwiseClone()

現在の Objectの簡易コピーを作成します。

(継承元 Object)
SaveConfigurationState()

ユーザーが設定した構成状態を ASP.NET 構成コントロールに保存します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)
Transform(Object)

実装時に、データを変換するためのオブジェクトを提供します。

適用対象