ConnectionProviderAttribute Classe

Definição

Identifica o método de callback num controlo de servidor que atua como fornecedor numa ligação Web Parts, e permite aos programadores especificar detalhes sobre o ponto de ligação do fornecedor.

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

Exemplos

O exemplo de código seguinte demonstra o uso da ConnectionProviderAttribute classe, mostrando como declarar o ConnectionProviderAttribute elemento de metadados num método de callback num controlo de fornecedor. Note-se que é usada a sobrecarga mais simples do construtor; apenas o valor do displayName parâmetro é fornecido.

[ConnectionProvider("Row")]
public IWebPartRow GetConnectionInterface()
{
    return new RowProviderWebPart();
}
<ConnectionProvider("Row")> _
Public Function GetConnectionInterface() As IWebPartRow
    Return New RowProviderWebPart()

End Function 'GetConnectionInterface

Os exemplos de código seguintes demonstram como criar uma ligação básica e estática entre dois controlos Web Parts usando a WebPartConnection classe. Os ficheiros de código do fornecedor e do consumidor devem ser colocados na pasta App_Code abaixo da pasta da aplicação que contém a página .aspx.

O primeiro exemplo mostra uma classe a atuar como prestadora. Note que um método é designado como método de callback com o ConnectionProviderAttribute 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 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 a agir como consumidor.

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 controlos.

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

Observações

Uma ligação Web Parts consiste em dois controlos de servidor que residem numa WebPartZoneBase zona e partilham dados através de uma instância de interface passada de um controlo para o outro. O controlo que serve a instância de interface chama-se fornecedor, e o controlo que recebe a instância de interface e processa ou apresenta os dados chama-se consumidor. Para detalhes sobre ligações, consulte a aula e a WebPartConnectionVisão Geral das Conexões de Web Parts.

O controlo do fornecedor numa ligação pode ser um WebPart controlo ou qualquer tipo de controlo de servidor ou utilizador, mas deve ter um método designado como método de retorno de chamada. O método de callback é invocado durante o processo de ligação, e o seu objetivo é devolver ao consumidor uma instância de interface que contenha dados. Para designar o método que serve como método de callback num fornecedor, deve adicionar um ConnectionProviderAttribute elemento de metadados ao método (o elemento baseia-se na ConnectionProviderAttribute classe).

Para além de designar o método de callback num fornecedor, o ConnectionProviderAttribute objeto também permite especificar certos detalhes sobre o ponto de ligação do fornecedor. Um ponto de ligação de fornecedor é uma instância da ProviderConnectionPoint classe que encapsula todos os detalhes sobre um fornecedor necessários para estabelecer uma ligação, incluindo o tipo de controlo do fornecedor, se pode ligar-se a múltiplos consumidores ao mesmo tempo, que tipo de interface o fornecedor serve aos consumidores, detalhes sobre o método de callback e um nome de exibição que representa o ponto de ligação do fornecedor na interface de utilizador (UI). Cada ligação Web Parts inclui um ponto de ligação ao fornecedor associado ao controlo do fornecedor.

Quando adiciona o ConnectionProviderAttribute elemento de metadados ao método de callback num fornecedor, também pode usá-lo para especificar os seguintes detalhes sobre o ponto de ligação do fornecedor: um nome de exibição para o ponto de ligação (para detalhes, ver a DisplayName propriedade), se o fornecedor pode ligar-se a múltiplos consumidores ao mesmo tempo (para mais detalhes, ver a AllowsMultipleConnections propriedade), um ID para o ponto de ligação (para detalhes, ver a ID propriedade) e o tipo do ponto de ligação que o fornecedor utiliza (para detalhes, ver a ConnectionPointType propriedade). As quatro sobrecargas do construtor para a ConnectionProviderAttribute classe têm cada uma parâmetros que permitem especificar valores para uma ou mais destas propriedades de pontos de ligação quando uma nova instância da classe é criada. A maioria das propriedades de um ponto de ligação de fornecedor pode também ser definida programaticamente; Configurá-los usando o ConnectionProviderAttribute elemento é opcional.

Note

Quando adiciona o ConnectionProviderAttribute elemento de metadados a um método de callback num fornecedor, o único parâmetro obrigatório que deve sempre especificar é o displayName parâmetro (para mais detalhes, veja a ConnectionProviderAttribute(String) sobrecarga do construtor). O valor deste parâmetro é atribuído à DisplayName propriedade e, quando um utilizador abre a interface de ligação (criada pelo ConnectionsZone controlo), o nome de exibição representa o ponto de ligação do fornecedor na interface. Se designar múltiplos métodos de callback num controlo de fornecedor, terá múltiplos pontos de ligação possíveis para escolher e, ao adicionar o ConnectionProviderAttribute elemento de metadados a cada método de callback, deve também especificar um valor para o id parâmetro, de modo a que cada ponto de ligação do fornecedor tenha um identificador único e conhecido.

Construtores

Name Description
ConnectionProviderAttribute(String, String, Type)

Inicializa uma nova instância da ConnectionProviderAttribute classe, especificando um nome de visualização, um ID e um tipo específico de objeto de ponto de ligação a usar para o ponto de ligação do fornecedor.

ConnectionProviderAttribute(String, String)

Inicializa uma nova instância da ConnectionProviderAttribute classe, especificando um nome de exibição e um ID para o ponto de ligação do fornecedor.

ConnectionProviderAttribute(String, Type)

Inicializa uma nova instância da ConnectionProviderAttribute classe, especificando um nome de exibição e um tipo específico de objeto de ponto de ligação a usar para o ponto de ligação do provedor.

ConnectionProviderAttribute(String)

Inicializa uma nova instância da ConnectionProviderAttribute classe, especificando um nome de exibição para o ponto de ligação do fornecedor.

Propriedades

Name Description
AllowsMultipleConnections

Obtém ou define um valor que indica se o ponto de ligação permite múltiplas ligações.

ConnectionPointType

Obtém o tipo de ponto de ligação associado ao controlo de um fornecedor.

DisplayName

Fica com o nome amigável do ponto de ligação do fornecedor.

DisplayNameValue

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

ID

Obtém uma cadeia que representa a identidade única do objeto ponto de ligação do fornecedor.

TypeId

Quando implementado numa classe derivada, obtém um identificador único para esta Attribute.

(Herdado de Attribute)

Métodos

Name Description
Equals(Object)

Devolve um valor que indica se esta instância é igual a um objeto especificado.

(Herdado de Attribute)
GetHashCode()

Devolve o código de hash para esta instância.

(Herdado de Attribute)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
IsDefaultAttribute()

Quando sobrescrito numa classe derivada, indica se o valor desta instância é o valor padrão para a classe derivada.

(Herdado de Attribute)
Match(Object)

Quando sobrescrito numa classe derivada, devolve um valor que indica se esta instância é igual a um objeto especificado.

(Herdado de Attribute)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Implementações de Interface Explícita

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

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de despacho.

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

Recupera a informação de tipo de um objeto, que pode ser usada para obter a informação de tipo para uma interface.

(Herdado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

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

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

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

(Herdado de Attribute)

Aplica-se a

Ver também