Export (0) Print
Expand All

RowToFieldTransformer Class

Transforms data in a Web Parts connection from a provider that implements the IWebPartRow interface to a consumer expecting data through the IWebPartField interface.

Namespace:  System.Web.UI.WebControls.WebParts
Assembly:  System.Web (in System.Web.dll)

'Declaration
<WebPartTransformerAttribute(GetType(IWebPartRow), GetType(IWebPartField))> _
<AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level := AspNetHostingPermissionLevel.Minimal)> _
Public NotInheritable Class RowToFieldTransformer _
	Inherits WebPartTransformer _
	Implements IWebPartField
'Usage
Dim instance As RowToFieldTransformer

Transformers are used to translate data between two Web Parts controls with incompatible connection points. A RowToFieldTransformer object transforms data from a provider implementing the IWebPartRow interface to a consumer requiring data from the IWebPartField interface. The RowToFieldTransformer class allows controls with these incompatible connection points to be connected.

The following code example demonstrates how to use a RowToFieldTransformer object to connect a provider and consumer with incompatible connection points. The first section of the example shows a Web Parts control that serves as a provider. The provider class, named RowProviderWebPart, provides data through the IWebPartRow interface.

Imports System
Imports System.Collections
Imports System.ComponentModel
Imports System.Data
Imports System.Reflection
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts

'This sample code creates a Web Parts control that acts as a provider of row data. 
Namespace Samples.AspNet.VB.Controls

    Public NotInheritable Class RowProviderWebPart
        Inherits WebPart
        Implements IWebPartRow

        Private _table As DataTable


        Public Sub New()
            _table = New DataTable()

            Dim col As New DataColumn()
            col.DataType = GetType(String)
            col.ColumnName = "Name"
            _table.Columns.Add(col)

            col = New DataColumn()
            col.DataType = GetType(String)
            col.ColumnName = "Address"
            _table.Columns.Add(col)

            col = New DataColumn()
            col.DataType = GetType(Integer)
            col.ColumnName = "ZIP Code"
            _table.Columns.Add(col)

            Dim row As DataRow = _table.NewRow()
            row("Name") = "John Q. Public"
            row("Address") = "123 Main Street"
            row("ZIP Code") = 98000
            _table.Rows.Add(row)

        End Sub 'New

        <ConnectionProvider("Row")> _
        Public Function GetConnectionInterface() As IWebPartRow
            Return New RowProviderWebPart()

        End Function 'GetConnectionInterface

        Public ReadOnly Property Schema() As PropertyDescriptorCollection _
            Implements IWebPartRow.Schema
            Get 
                Return TypeDescriptor.GetProperties(_table.DefaultView(0))
            End Get 
        End Property 

        Public Sub GetRowData(ByVal callback As RowCallback) _
            Implements IWebPartRow.GetRowData
            callback(_table.DefaultView(0))

        End Sub 'GetRowData
    End Class 'RowProviderWebPart           

End Namespace

The second section of the example contains a Web Parts control that is a consumer of a Web Parts connection. The consumer class, named FieldConsumerWebPart, expects data from the IWebPartField interface.

Imports System
Imports System.ComponentModel
Imports System.Reflection
Imports System.Collections
Imports System.Data
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts

Namespace Samples.AspNet.VB.Controls
    ' This sample code creates a Web Parts control that acts as  
    ' a consumer of an IField interface. 

    Public Class FieldConsumerWebPart
        Inherits WebPart

        Private _provider As IWebPartField
        Private _fieldValue As Object

        Private Sub GetFieldValue(ByVal fieldValue As Object)
            _fieldValue = fieldValue

        End Sub 'GetFieldValue

        Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
            If Not (_provider Is Nothing) Then
                _provider.GetFieldValue((New FieldCallback(AddressOf GetFieldValue)))
            End If 
            MyBase.OnPreRender(e)

        End Sub 'OnPreRender

        Protected Overrides Sub RenderContents(ByVal writer As HtmlTextWriter)

            If Not (_provider Is Nothing) Then 
                Dim prop As PropertyDescriptor = _provider.Schema

                If Not (prop Is Nothing) AndAlso Not (_fieldValue Is Nothing) Then
                    writer.Write(prop.DisplayName & ": " & _fieldValue)
                Else
                    writer.Write("No data")
                End If 
            Else
                writer.Write("Not connected")
            End If 

        End Sub 'RenderContents

        <ConnectionConsumer("Field")> _
        Public Sub SetConnectionInterface(ByVal provider As IWebPartField)
            _provider = provider

        End Sub 'SetConnectionInterface

        Private Class FieldConsumerConnectionPoint
            Inherits ConsumerConnectionPoint

            Public Sub New(ByVal callbackMethod As MethodInfo, _
              ByVal interfaceType As Type, ByVal controlType As Type, _
              ByVal name As String, ByVal id As String, _
              ByVal allowsMultipleConnections As Boolean)
                MyBase.New(callbackMethod, interfaceType, controlType, _
                  name, id, allowsMultipleConnections)

            End Sub 'New 
        End Class 'FieldConsumerConnectionPoint 
    End Class 'FieldConsumerWebPart

The third section of the example shows a page that contains the two controls and defines the RowToFieldTransformer object for connecting the two controls.

<%@ Page Language="VB" %>
<%@ register tagprefix="uc1" 
    tagname="DisplayModeMenuVB" 
    src="~/displaymodemenuvb.ascx" %>
<%@ Register TagPrefix="wp" 
    NameSpace="Samples.AspNet.VB.Controls" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>
<body>
  <form id="form1" runat="server">
    <asp:webpartmanager id="manager" runat="server">
    <staticconnections>
      <asp:WebPartConnection ID="conn1" ProviderID="rp1" ConsumerID="fc1">
        <asp:RowToFieldTransformer FieldName="Zip Code"/>
      </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 Title="provider" ID="rp1" runat="server" />
          <wp:FieldConsumerWebPart Title="consumer" ID="fc1" runat="server" />
        </zonetemplate>
      </asp:webpartzone>
    </td>
    <td>
      <asp:connectionszone id="connectionszone1" runat="server" />
    </td>
  </tr>
  </table>

  </form>
</body>
</html>

The code example includes a user control that enables you to change display modes on a Web Parts page. The source code for the user control comes from another topic. You can obtain the .ascx file for the user control from Walkthrough: Changing Display Modes on a Web Parts Page, and it must be placed in the same folder as the .aspx page.

System.Object
  System.Web.UI.WebControls.WebParts.WebPartTransformer
    System.Web.UI.WebControls.WebParts.RowToFieldTransformer

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0, 2.0

Community Additions

ADD
Show:
© 2015 Microsoft