Compartir a través de


WebPartTransformer Clase

Definición

Proporciona una implementación básica de las clases de transformador que convierten datos entre dos puntos de conexión incompatibles.

public ref class WebPartTransformer abstract
public abstract class WebPartTransformer
type WebPartTransformer = class
Public MustInherit Class WebPartTransformer
Herencia
WebPartTransformer
Derivado

Ejemplos

En el ejemplo de código siguiente se muestra cómo crear un transformador personalizado que derive de la WebPartTransformer clase . El transformador, denominado RowToStringTransformer, permite que un proveedor de elementos web y elementos web consumidor con puntos de conexión incompatibles se conecten. El proveedor presenta datos de tipo IWebPartRow, pero el consumidor solo acepta datos de tipo String. La RowToStringTransformer clase realiza la conversión necesaria.

El ejemplo de código no incluye una implementación del proveedor o consumidor. Debe crear un proveedor que implemente la IWebPartRow interfaz y un consumidor que espera datos a través de una interfaz personalizada denominada IString para que funcione el ejemplo.

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

La primera sección del ejemplo de código contiene código para los controles de proveedor y consumidor elementos web y el código del 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

En la segunda sección del ejemplo de código se muestra cómo incluir el transformador dentro de la sintaxis declarativa de un 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>

Se debe especificar un transformador personalizado en la <transformers> sección del archivo Web.config que esté disponible para su uso en una página web. En la tercera sección del ejemplo de código se muestra cómo agregar el transformador personalizado al archivo 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>  

El ejemplo de código incluye un control de usuario que permite cambiar los modos de visualización en una página de elementos web. El código fuente del control de usuario procede de otro tema. Puede obtener el archivo .ascx para el control de usuario de Walkthrough: Changing Display Modes on a elementos web Page y debe colocarse en la misma carpeta que la página .aspx.

Comentarios

Los transformadores se usan para traducir datos entre dos controles de elementos web con puntos de conexión incompatibles. Los puntos de conexión son incompatibles cuando proporcionan o consumen datos a través de interfaces diferentes. Por ejemplo, un proveedor que implementa un punto de conexión de proveedor de tipo IWebPartRow no pudo conectarse directamente a un consumidor que esperaba un punto de conexión de proveedor de tipo IWebPartTable. En su lugar, se debe usar un transformador para conectar los dos controles de elementos web.

El transformador acepta datos del tipo admitidos por el punto de conexión del proveedor. Realiza el procesamiento interno necesario para convertir esos datos en el tipo admitido por el punto de conexión del consumidor.

Un transformador puede proporcionar una interfaz de usuario (UI) que permita al usuario configurar el transformador cuando esté en modo de conexión. El control de configuración se recupera a través del CreateConfigurationControl método y se muestra en una zona de conexiones elementos web.

WebPartTransformer es una clase abstracta y debe ampliarse para proporcionar traducciones personalizadas entre diferentes tipos de puntos de conexión.

Notas a los implementadores

Debe invalidar el Transform(Object) método .

Constructores

WebPartTransformer()

Inicializa una nueva instancia de la clase WebPartTransformer.

Métodos

CreateConfigurationControl()

Muestra un control ASP.NET que configura un transformador en la zona ConnectionsZone.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
LoadConfigurationState(Object)

Carga el estado de configuración guardado con el método SaveConfigurationState().

MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
SaveConfigurationState()

Guarda el estado de configuración definido por el usuario en el control de configuración de ASP.NET.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)
Transform(Object)

Cuando se implementa, proporciona un objeto para transformar los datos.

Se aplica a