ConnectionConsumerAttribute Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Identifica el método de devolución de llamada de un control de servidor que actúa como consumidor en una conexión de elementos Web, y permite a los desarrolladores especificar detalles sobre el punto de conexión del consumidor.
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
- Herencia
- Atributos
Ejemplos
En el ejemplo de código siguiente se muestra cómo usar la ConnectionConsumerAttribute clase , mostrando cómo declarar el ConnectionConsumerAttribute
elemento de metadatos en un método de devolución de llamada en un control de consumidor. Tenga en cuenta que se usa la sobrecarga más sencilla del constructor; solo se proporciona el valor del displayName
parámetro.
[ConnectionConsumer("Row")]
public void SetConnectionInterface(IWebPartRow provider)
{
_provider = provider;
}
<ConnectionConsumer("Row")> _
Public Sub SetConnectionInterface(ByVal provider As IWebPartRow)
_provider = provider
End Sub
End Class
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.
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. Observe que un método se designa como método de devolución de llamada con el elemento de ConnectionConsumerAttribute
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 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 consumidor de 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 recibir del proveedor 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 consumidor, debe agregar un ConnectionConsumerAttribute
elemento de metadatos al método (el elemento se basa en la ConnectionConsumerAttribute clase ).
Además de designar el método de devolución de llamada en un consumidor, el ConnectionConsumerAttribute objeto también le permite especificar ciertos detalles sobre el punto de conexión de un consumidor. Un punto de conexión de consumidor es una instancia de la ConsumerConnectionPoint clase que encapsula todos los detalles sobre un consumidor necesario para establecer una conexión, incluido el tipo de control del consumidor, si puede conectarse a varios proveedores al mismo tiempo, qué tipo de interfaz puede recibir el consumidor de un proveedor, detalles sobre el método de devolución de llamada y un nombre para mostrar que representa el punto de conexión de consumidor en la interfaz de usuario (UI). Cada conexión de elementos web incluye un punto de conexión de consumidor asociado al control de consumidor.
Al agregar el ConnectionConsumerAttribute
elemento de metadatos al método de devolución de llamada en un consumidor, también puede usarlo para especificar los siguientes detalles sobre el punto de conexión de consumidor: un nombre para mostrar para el punto de conexión (para obtener más información, vea la DisplayName propiedad ), si el consumidor puede conectarse a varios proveedores 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 consumidor (para obtener más información, consulte la ConnectionPointType propiedad ). Las cuatro sobrecargas del constructor de la ConnectionConsumerAttribute 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 consumidor también se pueden establecer mediante programación; establecerlos con el ConnectionConsumerAttribute
elemento es opcional.
Nota
Al agregar el ConnectionConsumerAttribute
elemento de metadatos a un método de devolución de llamada en un consumidor, el único parámetro necesario que siempre debe especificar es el displayName
parámetro (para obtener más información, consulte la sobrecarga del ConnectionConsumerAttribute(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 consumidor en la interfaz de usuario. Si designa varios métodos de devolución de llamada en un control de consumidor, tendrá varios puntos de conexión posibles entre los que elegir y, al agregar el ConnectionConsumerAttribute
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 de consumidor tenga un identificador único conocido.
Constructores
ConnectionConsumerAttribute(String) |
Inicializa una nueva instancia de la clase ConnectionConsumerAttribute especificando un nombre para mostrar para el punto de conexión del consumidor. |
ConnectionConsumerAttribute(String, String) |
Inicializa una nueva instancia de la clase ConnectionConsumerAttribute especificando un nombre para mostrar y un identificador para el punto de conexión del consumidor. |
ConnectionConsumerAttribute(String, String, Type) |
Inicializa una nueva instancia de la clase ConnectionConsumerAttribute, 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 consumidor. |
ConnectionConsumerAttribute(String, Type) |
Inicializa una nueva instancia de la clase ConnectionConsumerAttribute 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 consumidor. |
Propiedades
AllowsMultipleConnections |
Obtiene o establece un valor que indica si el punto de conexión permite varias conexiones. |
ConnectionPointType |
Obtiene el tipo de punto de conexión del consumidor. |
DisplayName |
Obtiene el nombre descriptivo del punto de conexión del consumidor. |
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 consumidor. |
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) |