Condividi tramite


WebPartTransformer Classe

Definizione

Fornisce implementazione di base per consentire alle classi di trasformazione di convertire i dati tra due punti di connessione incompatibili.

public ref class WebPartTransformer abstract
public abstract class WebPartTransformer
type WebPartTransformer = class
Public MustInherit Class WebPartTransformer
Ereditarietà
WebPartTransformer
Derivato

Esempio

Nell'esempio di codice seguente viene illustrato come creare un trasformatore personalizzato che deriva dalla WebPartTransformer classe . Il trasformatore, denominato RowToStringTransformer, consente la connessione di un provider di Web part e Web part consumer con punti di connessione incompatibili. Il provider presenta i dati di tipo IWebPartRow, ma il consumer accetta solo i dati di tipo String. La RowToStringTransformer classe esegue la conversione necessaria.

L'esempio di codice non include un'implementazione del provider o del consumer. È necessario creare un provider che implementa l'interfaccia IWebPartRow e un consumer che prevede il funzionamento dei dati tramite un'interfaccia personalizzata denominata IString per il funzionamento dell'esempio.

// 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 prima sezione dell'esempio di codice contiene il codice per i controlli provider e consumer Web part e il codice per il trasformatore.

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

La seconda sezione dell'esempio di codice illustra come includere il trasformatore all'interno della sintassi dichiarativa per un WebPartConnection oggetto .

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

È necessario specificare un trasformatore personalizzato nella <transformers> sezione del file di Web.config che sia disponibile per l'uso in una pagina Web. La terza sezione dell'esempio di codice mostra come aggiungere il trasformatore personalizzato al file di 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>  

L'esempio di codice include un controllo utente che consente di modificare le modalità di visualizzazione in una pagina di Web part. Il codice sorgente per il controllo utente proviene da un altro argomento. È possibile ottenere il file con estensione ascx per il controllo utente da Procedura dettagliata: Modifica delle modalità di visualizzazione in una pagina Web part e deve essere inserito nella stessa cartella della pagina aspx.

Commenti

I trasformatori vengono usati per convertire i dati tra due controlli Web part con punti di connessione incompatibili. I punti di connessione non sono compatibili quando forniscono o utilizzano dati tramite interfacce diverse. Ad esempio, un provider che implementa un punto di connessione del provider di tipo IWebPartRow non è riuscito a connettersi direttamente a un consumer che prevede un punto di connessione del provider di tipo IWebPartTable. È invece necessario usare un trasformatore per connettere i due controlli Web part.

Il trasformatore accetta i dati del tipo supportato dal punto di connessione del provider. Esegue l'elaborazione interna necessaria per convertire i dati nel tipo supportato dal punto di connessione consumer.

Un trasformatore può fornire un'interfaccia utente che consente all'utente di configurare il trasformatore in modalità di connessione. Il controllo di configurazione viene recuperato tramite il CreateConfigurationControl metodo e viene visualizzato in una zona di connessioni Web part.

WebPartTransformer è una classe astratta e deve essere estesa per fornire traduzioni personalizzate tra tipi diversi di punti di connessione.

Note per gli implementatori

È necessario eseguire l'override del Transform(Object) metodo .

Costruttori

WebPartTransformer()

Inizializza una nuova istanza della classe WebPartTransformer.

Metodi

CreateConfigurationControl()

Visualizza un controllo ASP.NET tramite cui viene configurato un trasformatore nella zona ConnectionsZone.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
LoadConfigurationState(Object)

Carica lo stato della configurazione salvato con il metodo SaveConfigurationState().

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
SaveConfigurationState()

Salva lo stato della configurazione impostato dall'utente nel controllo configurazione ASP.NET.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)
Transform(Object)

Se implementato, fornisce un oggetto per la trasformazione dei dati.

Si applica a