ConsumerConnectionPoint Constructor
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í.
Inicializa una nueva instancia de la clase ConsumerConnectionPoint.
public:
ConsumerConnectionPoint(System::Reflection::MethodInfo ^ callbackMethod, Type ^ interfaceType, Type ^ controlType, System::String ^ displayName, System::String ^ id, bool allowsMultipleConnections);
public ConsumerConnectionPoint (System.Reflection.MethodInfo callbackMethod, Type interfaceType, Type controlType, string displayName, string id, bool allowsMultipleConnections);
new System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint : System.Reflection.MethodInfo * Type * Type * string * string * bool -> System.Web.UI.WebControls.WebParts.ConsumerConnectionPoint
Public Sub New (callbackMethod As MethodInfo, interfaceType As Type, controlType As Type, displayName As String, id As String, allowsMultipleConnections As Boolean)
Parámetros
- callbackMethod
- MethodInfo
Método del control consumidor que devuelve una instancia de interfaz a los consumidores para establecer una conexión.
- displayName
- String
Nombre descriptivo del punto de conexión del consumidor que se muestra a los usuarios en la interfaz de usuario de conexión.
- id
- String
Identificador único para el punto de conexión del consumidor.
- allowsMultipleConnections
- Boolean
Valor booleano que indica si el punto de conexión del consumidor puede tener varias conexiones simultáneas con proveedores.
Excepciones
callbackMethod
es null
.
O bien
interfaceType
es null
.
O bien
controlType
es null
.
o bien
displayName
es null
o una cadena vacía ("").
controlType
no es el mismo tipo que el control consumidor (o una clase válida derivada de él).
Ejemplos
En el ejemplo de código siguiente se muestra cómo derivar de la ConsumerConnectionPoint clase para crear un punto de conexión de proveedor personalizado.
El ejemplo de código tiene tres partes:
Un archivo de código fuente que contiene un control de proveedor WebPart , un control de consumidor WebPart y un objeto personalizado ConsumerConnectionPoint .
Página web que hospeda los controles en una conexión estática.
Explicación de cómo ejecutar el código de ejemplo.
La primera parte del ejemplo de código es el origen de los controles de proveedor y consumidor WebPart , y una clase personalizada ConsumerConnectionPoint , denominada TableConsumerConnectionPoint
. Tenga en cuenta que el constructor de la TableConsumerConnectionPoint
clase llama al constructor base y le pasa los parámetros necesarios como se indica en la sección Parámetros. Tenga en cuenta también que, en la TableConsumer
clase , el SetConnectionInterface
método se especifica como el método de devolución de llamada para las conexiones y el ConnectionConsumer
atributo declara el personalizado TableConsumerConnectionPoint
como parámetro. Esto muestra cómo crear un punto de conexión de consumidor personalizado y, a continuación, asociarlo a un control de consumidor. En este ejemplo se supone que el código fuente se compila dinámicamente, por lo que debe colocar el archivo de código fuente en una subcarpeta App_Code de la aplicación web.
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Reflection;
using System.Web;
using System.Web.UI;
using System.Security.Permissions;
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 table data.
namespace Samples.AspNet.CS.Controls
{
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public sealed class TableProviderWebPart : WebPart, IWebPartTable
{
DataTable _table;
public TableProviderWebPart()
{
_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);
}
public PropertyDescriptorCollection Schema
{
get
{
return TypeDescriptor.GetProperties(_table.DefaultView[0]);
}
}
public void GetTableData(TableCallback callback)
{
callback(_table.Rows);
}
public bool ConnectionPointEnabled
{
get
{
object o = ViewState["ConnectionPointEnabled"];
return (o != null) ? (bool)o : true;
}
set
{
ViewState["ConnectionPointEnabled"] = value;
}
}
[ConnectionProvider("Table", typeof(TableProviderConnectionPoint), AllowsMultipleConnections = true)]
public IWebPartTable GetConnectionInterface()
{
return new TableProviderWebPart();
}
public class TableProviderConnectionPoint : ProviderConnectionPoint
{
public TableProviderConnectionPoint(MethodInfo callbackMethod, Type interfaceType, Type controlType,
string name, string id, bool allowsMultipleConnections) : base(
callbackMethod, interfaceType, controlType,
name, id, allowsMultipleConnections)
{
}
public override bool GetEnabled(Control control)
{
return ((TableProviderWebPart)control).ConnectionPointEnabled;
}
}
}
// This code sample demonstrates a custom WebPart controls that acts as
// a consumer in a Web Parts connection.
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public class TableConsumer : WebPart
{
private IWebPartTable _provider;
private ICollection _tableData;
private void GetTableData(object tableData)
{
_tableData = (ICollection)tableData;
}
protected override void OnPreRender(EventArgs e)
{
if (_provider != null)
{
_provider.GetTableData(new TableCallback(GetTableData));
}
}
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("Table")]
public void SetConnectionInterface(IWebPartTable provider)
{
_provider = provider;
}
public class TableConsumerConnectionPoint : ConsumerConnectionPoint
{
public TableConsumerConnectionPoint(MethodInfo callbackMethod, Type interfaceType, Type controlType,
string name, string id, bool allowsMultipleConnections)
: base(
callbackMethod, interfaceType, controlType,
name, id, allowsMultipleConnections)
{
}
}
}
}
La segunda parte del ejemplo de código es la página web que hospeda los controles personalizados en una conexión de elementos web estáticos. En la parte superior de la página hay una Register
directiva para declarar un prefijo y el espacio de nombres para los controles personalizados. La conexión se declara mediante un <asp:webpartconnection>
elemento y los controles de proveedor y consumidor se declaran dentro de un <asp:webpartzone>
elemento .
<%@ page language="C#" %>
<%@ register tagprefix="aspSample"
namespace="Samples.AspNet.CS.Controls" %>
<!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>IField Test Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<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>
<aspSample:TableProviderWebPart ID="provider1" runat="server"
ToolTip="Web Parts Table Provider Control" />
<aspSample:TableConsumer ID="consumer1" runat="server"
ToolTip="Web Parts Table Consumer Control"/>
</zoneTemplate>
</asp:webpartzone>
</div>
</form>
</body>
</html>
Cargue la página en un explorador. La conexión entre los controles ya existe y el consumidor muestra los datos del proveedor, porque la conexión se declaró como una conexión estática en la página.
Comentarios
El ConsumerConnectionPoint constructor de la ConsumerConnectionPoint clase simplemente llama al constructor base, pasando a él los distintos parámetros e inicializando la clase base.
El constructor de clase base comprueba una serie de parámetros para un punto de conexión y puede producir varias excepciones. Para obtener una lista de las posibles excepciones, consulte la sección Excepciones.
Puede llamar al ConsumerConnectionPoint constructor para crear su propia instancia de la ConsumerConnectionPoint clase . Sin embargo, en los casos en los que simplemente establece una conexión y no extiende la clase , debe llamar al GetConsumerConnectionPoints método para devolver un objeto de punto de conexión de un proveedor.