Compartilhar via


WebPartTransformer Classe

Definição

Fornece uma implementação básica para as classes de transformador converterem dados entre dois pontos de conexão incompatíveis.

public ref class WebPartTransformer abstract
public abstract class WebPartTransformer
type WebPartTransformer = class
Public MustInherit Class WebPartTransformer
Herança
WebPartTransformer
Derivado

Exemplos

O exemplo de código a seguir demonstra como criar um transformador personalizado que deriva da WebPartTransformer classe. O transformador, nomeadoRowToStringTransformer, permite que um provedor de Web Parts e Web Parts consumidor com pontos de conexão incompatíveis sejam conectados. O provedor apresenta dados do tipo IWebPartRow, mas o consumidor aceita apenas dados do tipo String. A RowToStringTransformer classe executa a conversão necessária.

O exemplo de código não inclui uma implementação do provedor ou consumidor. Você deve criar um provedor que implemente a IWebPartRow interface e um consumidor que espera que os dados por meio de uma interface personalizada nomeada IString para o exemplo funcione.

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

A primeira seção do exemplo de código contém código para os controles de Web Parts do provedor e do consumidor e o código do transformador.

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

A segunda seção do exemplo de código mostra como incluir o transformador dentro da sintaxe declarativa de um WebPartConnection objeto.

<%@ 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>

Um transformador personalizado deve ser especificado na <transformers> seção do arquivo Web.config para estar disponível para uso em uma página da Web. A terceira seção do exemplo de código mostra como adicionar o transformador personalizado ao arquivo 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>  

O exemplo de código inclui um controle de usuário que permite alterar os modos de exibição em uma página Web Parts. O código-fonte do controle do usuário vem de outro tópico. Você pode obter o arquivo .ascx para o controle de usuário do Passo a passo: alterando modos de exibição em uma página Web Parts e ele deve ser colocado na mesma pasta que a página .aspx.

Comentários

Transformadores são usados para traduzir dados entre dois controles Web Parts com pontos de conexão incompatíveis. Os pontos de conexão são incompatíveis quando fornecem ou consomem dados por meio de interfaces diferentes. Por exemplo, um provedor que implementa um ponto de conexão de provedor do tipo IWebPartRow não pôde se conectar diretamente a um consumidor que esperava um ponto de conexão de provedor do tipo IWebPartTable. Em vez disso, um transformador deve ser usado para conectar os dois controles Web Parts.

O transformador aceita dados do tipo compatível com o ponto de conexão do provedor. Ele faz o processamento interno necessário para converter esses dados no tipo compatível com o ponto de conexão do consumidor.

Um transformador pode fornecer uma interface do usuário (interface do usuário) que permite que o usuário configure o transformador quando estiver no modo de conexão. O controle de configuração é recuperado por meio do CreateConfigurationControl método e é exibido em uma zona de conexões Web Parts.

WebPartTransformer é uma classe abstrata e deve ser estendida para fornecer traduções personalizadas entre diferentes tipos de pontos de conexão.

Notas aos Implementadores

Você deve substituir o Transform(Object) método.

Construtores

WebPartTransformer()

Inicializa uma nova instância da classe WebPartTransformer.

Métodos

CreateConfigurationControl()

Exibe um controle do ASP.NET que configura um transformador na zona ConnectionsZone.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
LoadConfigurationState(Object)

Carrega o estado de configuração salvo com o método SaveConfigurationState().

MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
SaveConfigurationState()

Salva o estado de configuração definido pelo usuário no controle de configuração do ASP.NET.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)
Transform(Object)

Quando implementado, fornece um objeto para transformar os dados.

Aplica-se a