Condividi tramite


ConsumerConnectionPoint Costruttore

Definizione

Inizializza una nuova istanza della classe 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)

Parametri

callbackMethod
MethodInfo

Metodo del controllo consumer che restituisce ai consumer un'istanza dell'interfaccia per stabilire una connessione.

interfaceType
Type

Oggetto Type dell'interfaccia che il consumer riceve da un provider.

controlType
Type

Oggetto Type del controllo consumer a cui viene associato il punto di connessione del consumer.

displayName
String

Nome visualizzato descrittivo per il punto di connessione del consumer presentato agli utenti nell'interfaccia utente di connessione.

id
String

Identificatore univoco per il punto di connessione del consumer.

allowsMultipleConnections
Boolean

Valore Boolean che indica se il punto di connessione del consumer può disporre di più connessioni simultanee con i provider.

Eccezioni

callbackMethod è null.

-oppure-

interfaceType è null.

-oppure-

controlType è null.

-oppure-

displayName è null o è una stringa vuota ("").

controlType non è dello stesso tipo del controllo consumer o di una classe valida da esso derivata.

Esempio

Nell'esempio ConsumerConnectionPoint di codice seguente viene illustrato come derivare dalla classe per creare un punto di connessione del provider personalizzato.

L'esempio di codice include tre parti:

  • File di origine che contiene un controllo provider WebPart , un controllo consumer WebPart e un oggetto personalizzato ConsumerConnectionPoint .

  • Pagina Web che ospita i controlli in una connessione statica.

  • Spiegazione di come eseguire il codice di esempio.

La prima parte dell'esempio di codice è l'origine per i controlli provider e consumer WebPart e una classe personalizzata, denominata ConsumerConnectionPointTableConsumerConnectionPoint. Si noti che il costruttore della classe chiama il costruttore di TableConsumerConnectionPoint base, passandolo i parametri necessari come indicato nella sezione Parametri. Si noti anche che nella TableConsumer classe il SetConnectionInterface metodo viene specificato come metodo di callback per le connessioni e l'attributo ConnectionConsumer dichiara l'oggetto personalizzato TableConsumerConnectionPoint come parametro. In questo modo viene illustrato come creare un punto di connessione consumer personalizzato e quindi associarlo a un controllo consumer. In questo esempio si presuppone che il codice sorgente sia compilato in modo dinamico, quindi è consigliabile inserire il file di codice sorgente in una sottocartella App_Code dell'applicazione 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 seconda parte dell'esempio di codice è la pagina Web che ospita i controlli personalizzati in una connessione web part statica. Nella parte superiore della pagina è una Register direttiva per dichiarare un prefisso e lo spazio dei nomi per i controlli personalizzati. La connessione viene dichiarata usando un <asp:webpartconnection> elemento e i controlli provider e consumer vengono dichiarati all'interno di 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>

Caricare la pagina in un browser. La connessione tra i controlli esiste già e il consumer visualizza i dati del provider, perché la connessione è stata dichiarata come connessione statica nella pagina.

Commenti

Il ConsumerConnectionPoint costruttore per la ConsumerConnectionPoint classe chiama semplicemente il costruttore di base, passandolo ai vari parametri e inizializzando la classe base.

Il costruttore della classe di base controlla un numero di parametri per un punto di connessione e può generare diverse eccezioni. Per un elenco delle possibili eccezioni, vedere la sezione Eccezioni.

È possibile chiamare il ConsumerConnectionPoint costruttore per creare una propria istanza della ConsumerConnectionPoint classe. Tuttavia, nei casi in cui si sta semplicemente creando una connessione e non estendendo la classe, è necessario chiamare il GetConsumerConnectionPoints metodo per restituire un oggetto punto di connessione da un provider.

Si applica a

Vedi anche