Condividi tramite


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 provider che restituisce un'istanza di interfaccia ai consumer per stabilire una connessione.

interfaceType
Type

Classe Type dell'interfaccia che il provider assegna ai consumer.

controlType
Type

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

displayName
String

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

id
String

Identificatore univoco per il punto di connessione provider.

allowsMultipleConnections
Boolean

Valore Boolean indicante se il punto di connessione provider può eseguire 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 provider, né una classe valida da esso derivata.

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 include 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 obbligatori 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 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 al costruttore i vari parametri e inizializzando la classe di 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