Compartilhar via


ProviderConnectionPoint Construtor

Definição

Inicializa uma nova instância da classe 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

O método no controle do provedor que retorna uma instância de interface para que os consumidores estabeleçam uma conexão.

interfaceType
Type

O Type da interface que o provedor serve aos consumidores.

controlType
Type

O Type do controle do provedor ao qual o ponto de conexão do provedor está associado.

displayName
String

Um nome de exibição amigável para o ponto de conexão do provedor que aparece para usuários na IU (interface do usuário) de conexão.

id
String

Um identificador exclusivo para o ponto de conexão do provedor.

allowsMultipleConnections
Boolean

Um valor booliano que indica se o ponto de conexão do provedor pode ter várias conexões simultâneas com consumidores.

Exceções

callbackMethod é null.

- ou -

interfaceType é null.

- ou -

controlType é null.

- ou -

displayName é null ou uma cadeia de caracteres vazia ("").

controlType não é o mesmo tipo que o controle do provedor (ou uma classe válida derivada dele).

Exemplos

O exemplo de código a seguir demonstra como derivar da ProviderConnectionPoint classe para criar um ponto de conexão de provedor personalizado.

O exemplo de código tem três partes:

  • Um arquivo de origem que contém um controle de provedor WebPart , um controle de consumidor WebPart e um objeto personalizado ProviderConnectionPoint .

  • Uma página da Web que hospeda os controles em uma conexão estática.

  • Uma explicação de como executar o código de exemplo.

A primeira parte do exemplo de código é a origem para os controles de provedor e consumidor WebPart e uma classe personalizada ProviderConnectionPoint , chamada TableProviderConnectionPoint. Observe que o construtor da TableProviderConnectionPoint classe chama o construtor base, passando-o os parâmetros necessários, conforme indicado na seção Parâmetros. Observe também que, na TableProviderWebPart classe , o GetConnectionInterface método é especificado como o método de retorno de chamada para conexões e o ConnectionProvider atributo declara o personalizado TableProviderConnectionPoint como um parâmetro. Isso demonstra como criar um ponto de conexão de provedor personalizado e associá-lo a um controle de provedor. Este exemplo pressupõe que o código-fonte seja compilado dinamicamente, portanto, você deve colocar o arquivo de código-fonte em uma subpasta App_Code do aplicativo 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)
      {
      }
    }
  }
}

A segunda parte do exemplo de código é a página da Web que hospeda os controles personalizados em uma conexão de Web Parts estática. Na parte superior da página está uma Register diretiva para declarar um prefixo e o namespace para os controles personalizados. A conexão é declarada usando um <asp:webpartconnection> elemento e os controles de provedor e consumidor são declarados dentro de um <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>

Carregue a página em um navegador. A conexão entre os controles já existe e o consumidor exibe os dados do provedor, pois a conexão foi declarada como uma conexão estática na página.

Comentários

O ProviderConnectionPoint construtor da ProviderConnectionPoint classe simplesmente chama o construtor base, passando para ele os vários parâmetros e inicializando a classe base.

O construtor de classe base verifica um número de parâmetros para um ponto de conexão e pode gerar várias exceções. Para obter uma lista de possíveis exceções, consulte a seção Exceções.

Você pode chamar o ProviderConnectionPoint construtor para criar sua própria instância da ProviderConnectionPoint classe . No entanto, nos casos em que você está simplesmente estabelecendo uma conexão e não estendendo a classe, você deve chamar o GetProviderConnectionPoints método para retornar um objeto de ponto de conexão existente de um provedor.

Aplica-se a

Confira também