WebPartTransformer Classe

Definição

Fornece uma implementação básica para classes transformadoras para converter dados entre dois pontos de ligaçã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 seguinte demonstra como criar um transformador personalizado que deriva da WebPartTransformer classe. O transformador, denominado RowToStringTransformer, permite que um fornecedor de Web Parts e um consumidor de Web Parts com pontos de ligação incompatíveis estejam ligados. O fornecedor apresenta dados do tipo IWebPartRow, mas o consumidor aceita apenas dados do tipo String. A RowToStringTransformer classe realiza a conversão necessária.

O exemplo de código não inclui uma implementação do fornecedor ou consumidor. Deve criar um fornecedor que implemente a IWebPartRow interface e um consumidor que espere que os dados através de uma interface personalizada nomeada IString pelo exemplo funcionem.

// 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 secção do exemplo de código contém código para os controlos Web Parts do fornecedor e consumidor, e o código para o 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 secçã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> secção do ficheiro de Web.config para estar disponível para utilização numa página Web. A terceira secção do exemplo do código mostra como adicionar o transformador personalizado ao ficheiro 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 controlo do utilizador que permite alterar os modos de visualização numa página de Web Parts. O código-fonte do controlo do utilizador vem de outro tópico. Pode obter o ficheiro .ascx para o controlo do utilizador através do Walkthrough: Changing Display Modes on a Web Parts Page, e deve ser colocado na mesma pasta da página .aspx.

Observações

Transformadores são usados para traduzir dados entre dois controlos Web Parts com pontos de ligação incompatíveis. Os pontos de ligação são incompatíveis quando fornecem ou consomem dados através de interfaces diferentes. Por exemplo, um fornecedor que implementa um ponto IWebPartRow de ligação do tipo não poderia ligar-se diretamente a um consumidor esperando um ponto IWebPartTablede ligação do tipo . Em vez disso, deve ser usado um transformador para ligar os dois controlos Web Parts.

O transformador aceita dados do tipo suportado pelo ponto de ligação do fornecedor. Faz o processamento interno necessário para converter esses dados no tipo suportado pelo ponto de ligação do consumidor.

Um transformador pode fornecer uma interface de utilizador (UI) que permite ao utilizador configurar o transformador quando está no modo de ligar. O controlo de configuração é recuperado através do CreateConfigurationControl método e é exibido numa zona de ligações Web Parts.

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

Notas para Implementadores

Deves ultrapassar o Transform(Object) método.

Construtores

Name Description
WebPartTransformer()

Inicializa uma nova instância da WebPartTransformer classe.

Métodos

Name Description
CreateConfigurationControl()

Exibe um controlo 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 função de hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
LoadConfigurationState(Object)

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

MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
SaveConfigurationState()

Guarda o estado de configuração definido pelo utilizador no controlo de configuração ASP.NET.

ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)
Transform(Object)

Quando implementado, fornece um objeto para transformar os dados.

Aplica-se a