Поделиться через


WebPartTransformer Класс

Определение

Предоставляет базовую реализацию для классов преобразователей, чтобы преобразовывать данные между двумя несовместимыми точками подключения.

public ref class WebPartTransformer abstract
public abstract class WebPartTransformer
type WebPartTransformer = class
Public MustInherit Class WebPartTransformer
Наследование
WebPartTransformer
Производный

Примеры

В следующем примере кода показано, как создать настраиваемый преобразователь, производный WebPartTransformer от класса . Преобразователь с именем RowToStringTransformerпозволяет подключать поставщика веб-частей и потребителя веб-частей с несовместимыми точками подключения. Поставщик предоставляет данные типа 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

Первый раздел примера кода содержит код для элементов управления веб-частей поставщика и потребителя, а также код для преобразователя.

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

Во втором разделе примера кода показано, как включить преобразователь в декларативный синтаксис для 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>

Настраиваемый преобразователь должен быть указан в <transformers> разделе файла Web.config, чтобы он был доступен для использования на веб-странице. В третьем разделе примера кода показано, как добавить настроенный преобразователь в файл 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>  

Пример кода включает пользовательский элемент управления, который позволяет изменять режимы отображения на странице веб-частей. Исходный код для пользовательского элемента управления поступает из другого раздела. ASCX-файл для пользовательского элемента управления можно получить в разделе Walkthrough: Changing Display Modes on a Web Parts Page (Пошаговое руководство. Изменение режимов отображения на странице веб-частей). Его необходимо поместить в ту же папку, что и aspx-страница.

Комментарии

Преобразователи используются для преобразования данных между двумя элементами управления веб-частей с несовместимыми точками подключения. Точки подключения несовместимы при предоставлении или использовании данных через разные интерфейсы. Например, поставщик, реализующий точку подключения поставщика типа IWebPartRow , не может напрямую подключиться к потребителю, ожидая точку подключения поставщика типа IWebPartTable. Вместо этого для соединения двух элементов управления веб-частей необходимо использовать преобразователь.

Преобразователь принимает данные типа, поддерживаемого точкой подключения поставщика. Он выполняет необходимую внутреннюю обработку для преобразования данных в тип, поддерживаемый точкой подключения потребителя.

Преобразователь может предоставить пользовательский интерфейс, позволяющий пользователю настраивать преобразователь в режиме подключения. Элемент управления конфигурацией извлекается с помощью CreateConfigurationControl метода и отображается в зоне подключений веб-частей.

WebPartTransformer является абстрактным классом и должен быть расширен для предоставления настраиваемых переводов между разными типами точек соединения.

Примечания для тех, кто реализует этот метод

Необходимо переопределить Transform(Object) метод .

Конструкторы

WebPartTransformer()

Инициализирует новый экземпляр класса WebPartTransformer.

Методы

CreateConfigurationControl()

Отображает элемент управления ASP.NET, который выполняет настройку преобразователя в области ConnectionsZone.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
LoadConfigurationState(Object)

Загружает состояние конфигурации, сохраненное в методе SaveConfigurationState().

MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
SaveConfigurationState()

Сохраняет состояние конфигурации, заданное пользователем в элементе управления конфигурации ASP.NET.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
Transform(Object)

При реализации предоставляет объект для преобразования данных.

Применяется к