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
El método del control proveedor que devuelve una instancia de interfaz a los consumidores para establecer una conexión.
- displayName
- String
Un nombre descriptivo para mostrar del punto de conexión del proveedor que se muestra a los usuarios en la interfaz de usuario de conexión.
- id
- String
Un identificador único para el punto de conexión del proveedor.
- allowsMultipleConnections
- Boolean
Un valor booleano que indica si el punto de conexión del proveedor puede tener varias conexiones simultáneas con 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 del mismo tipo que el control 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 y le pasa 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 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 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 las 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 establece una conexión y no extiende la clase , debe llamar al GetProviderConnectionPoints método para devolver un objeto de punto de conexión existente de un proveedor.