Compartir a través de


ConnectionProviderAttribute Clase

Definición

Identifica el método de devolución de llamada de un control de servidor que actúa como proveedor en una conexión de elementos Web, y permite a los desarrolladores especificar detalles sobre el punto de conexión del proveedor.

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
Herencia
ConnectionProviderAttribute
Atributos

Ejemplos

En el ejemplo de código siguiente se muestra cómo usar la ConnectionProviderAttribute clase , mostrando cómo declarar el ConnectionProviderAttribute elemento de metadatos en un método de devolución de llamada en un control de proveedor. Tenga en cuenta que se usa la sobrecarga más sencilla del constructor; solo se proporciona el valor del displayName parámetro.

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

End Function 'GetConnectionInterface

En los ejemplos de código siguientes se muestra cómo crear una conexión estática básica entre dos controles de elementos web mediante la WebPartConnection clase . Los archivos de código de proveedor y consumidor deben colocarse en la carpeta App_Code de la carpeta de la aplicación que contiene la página .aspx.

En el primer ejemplo se muestra una clase que actúa como proveedor. Observe que un método se designa como método de devolución de llamada con el elemento de ConnectionProviderAttribute metadatos.

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

En el segundo ejemplo se muestra una clase que actúa 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

En el ejemplo final se muestra la página ASP.NET que contiene los dos 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>

Comentarios

Una conexión de elementos web consta de dos controles de servidor que residen en una WebPartZoneBase zona y comparten datos mediante una instancia de interfaz que se pasa de un control a otro. El control que atiende la instancia de interfaz se denomina proveedor y el control que recibe la instancia de interfaz y procesa o muestra los datos se denomina consumidor. Para obtener más información sobre las conexiones, consulte la información general de conexiones WebPartConnection de elementos web y clases.

El control de proveedor en una conexión puede ser un WebPart control o cualquier tipo de servidor o control de usuario, pero debe tener un método designado como método de devolución de llamada. El método de devolución de llamada se invoca durante el proceso de conexión y su propósito es volver al consumidor una instancia de interfaz que contiene datos. Para designar el método que actúa como método de devolución de llamada en un proveedor, debe agregar un ConnectionProviderAttribute elemento de metadatos al método (el elemento se basa en la ConnectionProviderAttribute clase ).

Además de designar el método de devolución de llamada en un proveedor, el ConnectionProviderAttribute objeto también le permite especificar ciertos detalles sobre el punto de conexión de un proveedor. Un punto de conexión de proveedor es una instancia de la ProviderConnectionPoint clase que encapsula todos los detalles sobre un proveedor necesario para establecer una conexión, incluido el tipo de control del proveedor, si puede conectarse a varios consumidores al mismo tiempo, qué tipo de interfaz sirve el proveedor a los consumidores, detalles sobre el método de devolución de llamada y un nombre para mostrar que representa el punto de conexión del proveedor en la interfaz de usuario (UI). Cada conexión de elementos web incluye un punto de conexión de proveedor asociado al control de proveedor.

Al agregar el ConnectionProviderAttribute elemento de metadatos al método de devolución de llamada en un proveedor, también puede usarlo para especificar los detalles siguientes sobre el punto de conexión del proveedor: un nombre para mostrar para el punto de conexión (para obtener más información, consulte la DisplayName propiedad ), si el proveedor puede conectarse a varios consumidores al mismo tiempo (para obtener más información, vea la AllowsMultipleConnections propiedad ), un identificador para el punto de conexión (para obtener más información, vea la ID propiedad) y el tipo del punto de conexión que usa el proveedor (para obtener más información, consulte la ConnectionPointType propiedad ). Las cuatro sobrecargas del constructor de la ConnectionProviderAttribute clase tienen cada uno parámetros que permiten especificar valores para una o varias de estas propiedades de punto de conexión cuando se crea una nueva instancia de la clase. La mayoría de las propiedades de un punto de conexión de proveedor también se pueden establecer mediante programación; establecerlos con el ConnectionProviderAttribute elemento es opcional.

Nota

Al agregar el ConnectionProviderAttribute elemento de metadatos a un método de devolución de llamada en un proveedor, el único parámetro necesario que siempre debe especificar es el displayName parámetro (para obtener más información, consulte la sobrecarga del ConnectionProviderAttribute(String) constructor). El valor de este parámetro se asigna a la DisplayName propiedad y, cuando un usuario abre la interfaz de usuario de conexión (creada por el ConnectionsZone control), el nombre para mostrar representa el punto de conexión del proveedor en la interfaz de usuario. Si designa varios métodos de devolución de llamada en un control de proveedor, tendrá varios puntos de conexión posibles entre los que elegir y, al agregar el ConnectionProviderAttribute elemento de metadatos a cada método de devolución de llamada, también debe especificar un valor para el id parámetro, de modo que cada punto de conexión del proveedor tenga un identificador único conocido.

Constructores

ConnectionProviderAttribute(String)

Inicializa una nueva instancia de la clase ConnectionProviderAttribute especificando un nombre para mostrar para el punto de conexión del proveedor.

ConnectionProviderAttribute(String, String)

Inicializa una nueva instancia de la clase ConnectionProviderAttribute especificando un nombre para mostrar y un identificador para el punto de conexión del proveedor.

ConnectionProviderAttribute(String, String, Type)

Inicializa una nueva instancia de la clase ConnectionProviderAttribute, y especifica un nombre para mostrar, un identificador y el tipo concreto del objeto de punto de conexión que se usará para el punto de conexión del proveedor.

ConnectionProviderAttribute(String, Type)

Inicializa una nueva instancia de la clase ConnectionProviderAttribute especificando un nombre para mostrar y un tipo de objeto de punto de conexión específico que se va a utilizar en el punto de conexión del proveedor.

Propiedades

AllowsMultipleConnections

Obtiene o establece un valor que indica si el punto de conexión permite varias conexiones.

ConnectionPointType

Obtiene el tipo del punto de conexión asociado con un control proveedor.

DisplayName

Obtiene el nombre descriptivo del punto de conexión del proveedor.

DisplayNameValue

Obtiene o establece la cadena que se utiliza como valor de la propiedad DisplayName, que se puede utilizar en escenarios de localización.

ID

Obtiene una cadena que representa la identidad única del punto de conexión del proveedor.

TypeId

Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute.

(Heredado de Attribute)

Métodos

Equals(Object)

Devuelve un valor que indica si esta instancia es igual que un objeto especificado.

(Heredado de Attribute)
GetHashCode()

Devuelve el código hash de esta instancia.

(Heredado de Attribute)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
IsDefaultAttribute()

Si se reemplaza en una clase derivada, indica si el valor de esta instancia es el valor predeterminado de la clase derivada.

(Heredado de Attribute)
Match(Object)

Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual a un objeto especificado.

(Heredado de Attribute)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Implementaciones de interfaz explícitas

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

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.

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

Obtiene la información de tipos de un objeto, que puede utilizarse para obtener la información de tipos de una interfaz.

(Heredado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera el número de interfaces de información de tipo que proporciona un objeto (0 ó 1).

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

Proporciona acceso a las propiedades y los métodos expuestos por un objeto.

(Heredado de Attribute)

Se aplica a

Consulte también