ProviderConnectionPoint 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 ProviderConnectionPoint.
public:
ProviderConnectionPoint(System::Reflection::MethodInfo ^ callbackMethod, Type ^ interfaceType, Type ^ controlType, System::String ^ displayName, System::String ^ id, bool allowsMultipleConnections);
public ProviderConnectionPoint(System.Reflection.MethodInfo callbackMethod, Type interfaceType, Type controlType, string displayName, string id, bool allowsMultipleConnections);
new System.Web.UI.WebControls.WebParts.ProviderConnectionPoint : System.Reflection.MethodInfo * Type * Type * string * string * bool -> System.Web.UI.WebControls.WebParts.ProviderConnectionPoint
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 de proveedor que devuelve una instancia de interfaz a los consumidores para establecer una conexión.
- controlType
- Type
Type del control de proveedor con el que está asociado el punto de conexión del proveedor.
- displayName
- String
Un nombre para mostrar descriptivo para el punto de conexión del proveedor que aparece a los usuarios en la interfaz de usuario (UI) de conexión.
- id
- String
Identificador único para el punto de conexión del proveedor.
- allowsMultipleConnections
- Boolean
Valor booleano que indica si el punto de conexión del proveedor puede tener varias conexiones simultáneas con los consumidores.
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 de proveedor (o una clase válida derivada de él).
Ejemplos
En el ejemplo de código siguiente se muestra cómo derivar de la ProviderConnectionPoint 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 ProviderConnectionPoint .
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 ProviderConnectionPoint , denominada TableProviderConnectionPoint. Tenga en cuenta que el constructor de la TableProviderConnectionPoint clase llama al constructor base, pasando los parámetros necesarios, como se indica en la sección Parámetros. Tenga en cuenta también que, en la TableProviderWebPart clase , el GetConnectionInterface método se especifica como el método de devolución de llamada para las conexiones y el ConnectionProvider atributo declara el personalizado TableProviderConnectionPoint como parámetro. Esto muestra cómo crear un punto de conexión de proveedor personalizado y, a continuación, asociarlo a un control de proveedor. 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 de 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, ya que la conexión se declaró como una conexión estática en la página.
Comentarios
El ProviderConnectionPoint constructor de la ProviderConnectionPoint 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 posibles excepciones, consulte la sección Excepciones.
Puede llamar al ProviderConnectionPoint constructor para crear su propia instancia de la ProviderConnectionPoint clase . Sin embargo, en los casos en los que simplemente establezca una conexión y no extienda la clase, debe llamar al GetProviderConnectionPoints método para devolver un objeto de punto de conexión existente desde un proveedor.