Share via


ProviderConnectionPoint Constructor

Definición

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.

interfaceType
Type

Control Type de la interfaz que el proveedor proporciona a los consumidores.

controlType
Type

Type del control proveedor al que se asocia el punto de conexión del proveedor.

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, 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 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 estática de elementos web. 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 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.

Se aplica a

Consulte también