ProviderConnectionPoint Costruttore

Definizione

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

Parametri

callbackMethod
MethodInfo

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

interfaceType
Type

Oggetto Type dell'interfaccia usata dal provider ai consumer.

controlType
Type

Oggetto Type del controllo del provider a cui è associato il punto di connessione del provider.

displayName
String

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

id
String

Identificatore univoco per il punto di connessione del provider.

allowsMultipleConnections
Boolean

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

Eccezioni

callbackMethod è null.

oppure

interfaceType è null.

oppure

controlType è null.

oppure

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

controlType non è lo stesso tipo del controllo del provider (o una classe valida derivata da esso).

Esempio

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

L'esempio di codice ha tre parti:

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

  • 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 ProviderConnectionPointTableProviderConnectionPoint. Si noti che il costruttore della TableProviderConnectionPoint classe chiama il costruttore di base, passando i parametri necessari come indicato nella sezione Parametri. Si noti anche che nella TableProviderWebPart classe il GetConnectionInterface metodo viene specificato come metodo di callback per le connessioni e l'attributo dichiara l'oggetto ConnectionProvider personalizzato TableProviderConnectionPoint come parametro. Viene illustrato come creare un punto di connessione del provider personalizzato e quindi associarlo a un controllo del provider. In questo esempio si presuppone che il codice sorgente sia compilato in modo dinamico, pertanto è necessario 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 è presente una Register direttiva per dichiarare un prefisso e lo spazio dei nomi per i controlli personalizzati. La connessione viene dichiarata tramite 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 ProviderConnectionPoint costruttore per la ProviderConnectionPoint classe chiama semplicemente il costruttore di base, passando a esso i vari parametri e inizializzando la classe base.

Il costruttore della classe 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 ProviderConnectionPoint costruttore per creare la propria istanza della ProviderConnectionPoint classe . Tuttavia, nei casi in cui si sta semplicemente stabilendo una connessione e non estendendo la classe, è necessario chiamare il GetProviderConnectionPoints metodo per restituire un oggetto punto di connessione esistente da un provider.

Si applica a

Vedi anche