Partilhar via


ConnectionConsumerAttribute Classe

Definição

Identifica o método de retorno de chamada em um controle de servidor que funciona como o consumidor em uma conexão de Web Parts e permite que os desenvolvedores especifiquem detalhes sobre o ponto de conexão do cliente.

public ref class ConnectionConsumerAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Method)]
public class ConnectionConsumerAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Method)>]
type ConnectionConsumerAttribute = class
    inherit Attribute
Public Class ConnectionConsumerAttribute
Inherits Attribute
Herança
ConnectionConsumerAttribute
Atributos

Exemplos

O exemplo de código a seguir demonstra o uso da ConnectionConsumerAttribute classe , mostrando como declarar o ConnectionConsumerAttribute elemento de metadados em um método de retorno de chamada em um controle do consumidor. Observe que a sobrecarga mais simples do construtor é usada; apenas o valor do displayName parâmetro é fornecido.

[ConnectionConsumer("Row")]
public void SetConnectionInterface(IWebPartRow provider) 
{
    _provider = provider;
}
    <ConnectionConsumer("Row")> _
    Public Sub SetConnectionInterface(ByVal provider As IWebPartRow)
        _provider = provider

    End Sub
End Class

Os exemplos de código a seguir demonstram como criar uma conexão estática e básica entre dois controles de Web Parts usando a WebPartConnection classe . Os arquivos de código do provedor e do consumidor devem ser colocados na pasta App_Code na pasta do aplicativo que contém a página .aspx.

O primeiro exemplo mostra uma classe atuando como um provedor.

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Reflection;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
//This sample code creates a Web Parts control that acts as a provider of row data.
namespace My 
{
    public sealed class RowProviderWebPart : WebPart, IWebPartRow 
    {

        private DataTable _table;

        public RowProviderWebPart() 
        {
            _table = new DataTable();

            DataColumn col = new DataColumn();
            col.DataType = typeof(string);
            col.ColumnName = "Name";
            _table.Columns.Add(col);

            col = new DataColumn();
            col.DataType = typeof(string);
            col.ColumnName = "Address";
            _table.Columns.Add(col);

            col = new DataColumn();
            col.DataType = typeof(int);
            col.ColumnName = "ZIP Code";
            _table.Columns.Add(col);

            DataRow row = _table.NewRow();
            row["Name"] = "John Q. Public";
            row["Address"] = "123 Main Street";
            row["ZIP Code"] = 98000;
            _table.Rows.Add(row);
        }
        [ConnectionProvider("Row")]
        public IWebPartRow GetConnectionInterface()
        {
            return new RowProviderWebPart();
        }
        public PropertyDescriptorCollection Schema 
        {
            get {
                return TypeDescriptor.GetProperties(_table.DefaultView[0]);
                }
        }
        public void GetRowData(RowCallback callback)
        {
            callback(_table.Rows);
        }
    }
}
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 MyCustomWebPart

    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

        <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.Rows)

        End Sub
    End Class

O segundo exemplo mostra uma classe atuando como consumidor. Observe que um método é designado como o método de retorno de chamada com o ConnectionConsumerAttribute elemento de metadados.

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Reflection;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
// This sample code creates a Web Parts control that acts as a consumer of row data.
namespace My 
{

    public sealed class RowConsumerWebPart : WebPart {
        private IWebPartRow _provider;
        private ICollection _tableData;
    
            private void GetRowData(object rowData)
            {
                _tableData = (ICollection)rowData;
            }

        protected override void OnPreRender(EventArgs e)
        {
                if (_provider != null)
                {
                    _provider.GetRowData(new RowCallback(GetRowData));
                }
        }

        protected override void RenderContents(HtmlTextWriter writer) {
            if (_provider != null) {
                PropertyDescriptorCollection props = _provider.Schema;
                int count = 0;
                if (props != null && props.Count > 0 && _tableData != null) {
                    foreach (PropertyDescriptor prop in props) 
                    {
                        foreach (DataRow o in _tableData)
                        {
                            writer.Write(prop.DisplayName + ": " + o[count]);
                            writer.WriteBreak();
                            writer.WriteLine();
                            count = count + 1;
                        }
                    }
                }
                else {
                    writer.Write("No data");
                }
            }
            else {
                writer.Write("Not connected");
            }
        }
        [ConnectionConsumer("Row")]
        public void SetConnectionInterface(IWebPartRow provider) 
        {
            _provider = provider;
        }
         }
    }
//}
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 consumer of row data.
Namespace MyCustomWebPart

    Public NotInheritable Class RowConsumerWebPart
        Inherits WebPart
        Private _provider As IWebPartRow
        Private _tableData As ICollection


        Private Sub GetRowData(ByVal rowData As Object)
            _tableData = CType(rowData, ICollection)

        End Sub


        Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
            If Not (_provider Is Nothing) Then
                '        _provider.GetRowData(AddressOf (New RowCallback(GetRowData)))
                _provider.GetRowData(AddressOf GetRowData)
                '    _provider.GetRowData(New RowCallback(AddressOf GetRowData))
            End If

        End Sub



        Protected Overrides Sub RenderContents(ByVal writer As HtmlTextWriter)
            If Not (_provider Is Nothing) Then
                Dim props As PropertyDescriptorCollection = _provider.Schema
                Dim count As Integer = 0
                If Not (props Is Nothing) AndAlso props.Count > 0 AndAlso Not (_tableData Is Nothing) Then
                    Dim prop As PropertyDescriptor
                    For Each prop In props
                        Dim o As DataRow
                        For Each o In _tableData
                            writer.Write(prop.DisplayName & ": " & o(count))
                            writer.WriteBreak()
                            writer.WriteLine()
                            count = count + 1
                        Next o
                    Next prop
                Else
                    writer.Write("No data")
                End If
            Else
                writer.Write("Not connected")
            End If

        End Sub

        <ConnectionConsumer("Row")> _
        Public Sub SetConnectionInterface(ByVal provider As IWebPartRow)
            _provider = provider

        End Sub
    End Class

O exemplo final mostra a página ASP.NET que contém os dois controles.

<%@ page language="C#" %>
<%@ register TagPrefix="my" Namespace="My" %>

<!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 runat="server">
    <title>IRow Test Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <!-- A static or dynamic connection is required to link two Web Parts controls. --->
        <asp:webpartmanager ID="WebPartManager1" runat="server">
            <staticconnections>
                <asp:webpartconnection ID="wp1" ProviderID="provider1" ConsumerID="consumer1" >
                </asp:webpartconnection>
            </staticconnections>
        </asp:webpartmanager>
       
        <asp:webpartzone ID="WebPartZone1" runat="server">
            <ZoneTemplate>
                <!-- The following two lines specify the two connected controls. --->
                <my:RowProviderWebPart ID="provider1" runat="server" ToolTip="Row Provider Control" />
                <my:RowConsumerWebPart ID="consumer1" runat="server" ToolTip="Row Consumer Control" />
            </ZoneTemplate>
        </asp:webpartzone>
    </div>
    </form>
</body>
</html>
<%@ page language="VB" %>
<%@ Register TagPrefix="my" Namespace="MyCustomWebPart" %>

<!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 runat="server">
    <title>IRow Test Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <!-- A static or dynamic connection is required to link two Web Parts controls. --->
        <asp:webpartmanager ID="WebPartManager1" runat="server">
            <staticconnections>
                <asp:webpartconnection ID="wp1" ProviderID="provider1" ConsumerID="consumer1" >
                </asp:webpartconnection>
            </staticconnections>
        </asp:webpartmanager>
       
        <asp:webpartzone ID="WebPartZone1" runat="server">
            <ZoneTemplate>
                <my:RowProviderWebPart ID="provider1" runat="server" ToolTip="Row Provider Control" />
                <my:RowConsumerWebPart ID="consumer1" runat="server" ToolTip="Row Consumer Control" />
           </ZoneTemplate>
        </asp:webpartzone>
    </div>
    </form>
</body>
</html>

Comentários

Uma conexão de Web Parts consiste em dois controles de servidor que residem em uma WebPartZoneBase zona e compartilham dados por meio de uma instância de interface passada de um controle para o outro. O controle que atende à instância de interface é chamado de provedor e o controle que recebe a instância de interface e processa ou exibe os dados é chamado de consumidor. Para obter detalhes sobre conexões, consulte a WebPartConnectionclasse e a Visão geral das Conexões de Web Parts.

O controle do consumidor em uma conexão pode ser um WebPart controle ou qualquer tipo de controle de servidor ou usuário, mas deve ter um método designado como um método de retorno de chamada. O método de retorno de chamada é invocado durante o processo de conexão e sua finalidade é receber do provedor uma instância de interface que contém dados. Para designar o método que serve como o método de retorno de chamada em um consumidor, você deve adicionar um ConnectionConsumerAttribute elemento de metadados ao método (o elemento é baseado na ConnectionConsumerAttribute classe ).

Além de designar o método de retorno de chamada em um consumidor, o ConnectionConsumerAttribute objeto também permite que você especifique determinados detalhes sobre o ponto de conexão de um consumidor. Um ponto de conexão do consumidor é uma instância da ConsumerConnectionPoint classe que encapsula todos os detalhes sobre um consumidor necessário para estabelecer uma conexão, incluindo o tipo de controle do consumidor, se ele pode se conectar a vários provedores ao mesmo tempo, que tipo de interface o consumidor pode receber de um provedor, detalhes sobre o método de retorno de chamada e um nome de exibição que representa o ponto de conexão do consumidor na interface do usuário (interface do usuário). Cada conexão de Web Parts inclui um ponto de conexão do consumidor associado ao controle do consumidor.

Ao adicionar o ConnectionConsumerAttribute elemento de metadados ao método de retorno de chamada em um consumidor, você também pode usá-lo para especificar os seguintes detalhes sobre o ponto de conexão do consumidor: um nome de exibição para o ponto de conexão (para obter detalhes, consulte a DisplayName propriedade), se o consumidor pode se conectar a vários provedores ao mesmo tempo (para obter detalhes, consulte a AllowsMultipleConnections propriedade), uma ID para o ponto de conexão (para obter detalhes, consulte a ID propriedade) e o tipo do ponto de conexão que o consumidor usa (para obter detalhes, consulte a ConnectionPointType propriedade). As quatro sobrecargas do construtor para a ConnectionConsumerAttribute classe têm parâmetros que permitem especificar valores para uma ou mais dessas propriedades de ponto de conexão quando uma nova instância da classe é criada. A maioria das propriedades de um ponto de conexão do consumidor também pode ser definida programaticamente; defini-los usando o ConnectionConsumerAttribute elemento é opcional.

Observação

Quando você adiciona o ConnectionConsumerAttribute elemento de metadados a um método de retorno de chamada em um consumidor, o único parâmetro necessário que você sempre deve especificar é o displayName parâmetro (para obter detalhes, consulte a sobrecarga do ConnectionConsumerAttribute(String) construtor). O valor desse parâmetro é atribuído à DisplayName propriedade e, quando um usuário abre a interface do usuário da conexão (criada pelo ConnectionsZone controle), o nome de exibição representa o ponto de conexão do consumidor na interface do usuário. Se você designar vários métodos de retorno de chamada em um controle de consumidor, terá vários pontos de conexão possíveis para escolher e, ao adicionar o ConnectionConsumerAttribute elemento de metadados a cada método de retorno de chamada, também deverá especificar um valor para o id parâmetro, para que cada ponto de conexão do consumidor tenha um identificador conhecido e exclusivo.

Construtores

ConnectionConsumerAttribute(String)

Inicializa uma nova instância da classe ConnectionConsumerAttribute, especificando um nome de exibição para o ponto de conexão do consumidor.

ConnectionConsumerAttribute(String, String)

Inicializa uma nova instância da classe ConnectionConsumerAttribute, especificando um nome de exibição e uma ID para o ponto de conexão do consumidor.

ConnectionConsumerAttribute(String, String, Type)

Inicializa uma nova instância da classe ConnectionConsumerAttribute, especificando um nome de exibição, uma ID e um tipo específico de objeto de ponto de conexão a ser usado para o ponto de conexão do consumidor.

ConnectionConsumerAttribute(String, Type)

Inicializa uma nova instância da classe ConnectionConsumerAttribute, especificando um nome de exibição e um tipo específico de objeto de ponto de conexão a ser usado para o ponto de conexão do consumidor.

Propriedades

AllowsMultipleConnections

Obtém ou define um valor que indica se o ponto de conexão permite várias conexões.

ConnectionPointType

Obtém o tipo de ponto de conexão do ponto de conexão de consumidor.

DisplayName

Obtém o nome amigável do ponto de conexão de consumidor.

DisplayNameValue

Obtém ou define a cadeia de caracteres usada como o valor da propriedade DisplayName, para uso em cenários de localização.

ID

Obtém uma cadeia de caracteres que representa a identidade exclusiva do ponto de conexão de consumidor.

TypeId

Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Attribute.

(Herdado de Attribute)

Métodos

Equals(Object)

Retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
GetHashCode()

Retorna o código hash para a instância.

(Herdado de Attribute)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
IsDefaultAttribute()

Quando substituído em uma classe derivada, indica se o valor dessa instância é o valor padrão para a classe derivada.

(Herdado de Attribute)
Match(Object)

Quando substituído em uma classe derivada, retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição.

(Herdado de Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera as informações de tipo para um objeto, que pode ser usado para obter as informações de tipo para uma interface.

(Herdado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Retorna o número de interfaces de informações do tipo que um objeto fornece (0 ou 1).

(Herdado de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornece acesso a propriedades e métodos expostos por um objeto.

(Herdado de Attribute)

Aplica-se a

Confira também