Freigeben über


ProviderConnectionPoint Konstruktor

Definition

Initialisiert eine neue Instanz der ProviderConnectionPoint-Klasse.

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)

Parameter

callbackMethod
MethodInfo

Die Methode im Anbietersteuerelement, die zum Erstellen einer Verbindung eine Schnittstelleninstanz an die Consumer zurückgibt.

interfaceType
Type

Der Type der Schnittstelle, die der Anbieter für Consumer bereitstellt.

controlType
Type

Der Type des Anbietersteuerelements, dem der Anbieterverbindungspunkt zugeordnet wird.

displayName
String

Ein Anzeigename für den Anbieterverbindungspunkt, der für Benutzer in der Verbindungs-Benutzeroberfläche angezeigt wird.

id
String

Ein eindeutiger Bezeichner für den Anbieterverbindungspunkt.

allowsMultipleConnections
Boolean

Ein boolescher Wert, der angibt, ob der Anbieterverbindungspunkt mehrere gleichzeitige Verbindungen mit Consumern haben kann.

Ausnahmen

callbackMethod ist null.

- oder -

interfaceType ist null.

- oder -

controlType ist null.

- oder -

displayName ist null oder eine leere Zeichenfolge ("").

controlType ist nicht der gleiche Typ wie das Anbietersteuerelement (oder eine davon abgeleitete gültige Klasse).

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie Sie von der ProviderConnectionPoint -Klasse ableiten, um einen benutzerdefinierten Anbieterverbindungspunkt zu erstellen.

Das Codebeispiel umfasst drei Teile:

  • Eine Quelldatei, die ein Anbietersteuerelement WebPart , ein Consumersteuerelement WebPart und ein benutzerdefiniertes ProviderConnectionPoint Objekt enthält.

  • Eine Webseite, die die Steuerelemente in einer statischen Verbindung hostet.

  • Eine Erklärung zum Ausführen des Beispielcodes.

Der erste Teil des Codebeispiels ist die Quelle für die Anbieter- und Consumersteuerelemente WebPart sowie eine benutzerdefinierte ProviderConnectionPoint Klasse mit dem Namen TableProviderConnectionPoint. Beachten Sie, dass der Konstruktor der TableProviderConnectionPoint -Klasse den Basiskonstruktor aufruft und ihn die erforderlichen Parameter übergibt, wie im Abschnitt Parameter angegeben. Beachten Sie auch, dass in der TableProviderWebPart -Klasse die GetConnectionInterface -Methode als Rückrufmethode für Verbindungen angegeben wird und das ConnectionProvider -Attribut den benutzerdefinierten TableProviderConnectionPoint als Parameter deklariert. Dadurch wird veranschaulicht, wie Sie einen benutzerdefinierten Anbieterverbindungspunkt erstellen und ihn dann einem Anbietersteuerelement zuordnen. In diesem Beispiel wird davon ausgegangen, dass der Quellcode dynamisch kompiliert wird. Daher sollten Sie die Quellcodedatei in einem App_Code Unterordner Ihrer Webanwendung ablegen.

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)
      {
      }
    }
  }
}

Der zweite Teil des Codebeispiels ist die Webseite, die die benutzerdefinierten Steuerelemente in einer statischen Webparts-Verbindung hostet. Oben auf der Seite befindet sich eine Register -Anweisung zum Deklarieren eines Präfixes und des Namespace für die benutzerdefinierten Steuerelemente. Die Verbindung wird mithilfe eines <asp:webpartconnection> -Elements deklariert, und die Anbieter- und Consumersteuerelemente werden in einem <asp:webpartzone> -Element deklariert.

<%@ 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>

Laden Sie die Seite in einen Browser. Die Verbindung zwischen den Steuerelementen ist bereits vorhanden, und der Consumer zeigt die Daten vom Anbieter an, da die Verbindung auf der Seite als statische Verbindung deklariert wurde.

Hinweise

Der ProviderConnectionPoint Konstruktor für die ProviderConnectionPoint -Klasse ruft einfach den Basiskonstruktor auf, übergibt an ihn die verschiedenen Parameter und initialisiert die Basisklasse.

Der Basisklassenkonstruktor überprüft eine Reihe der Parameter für einen Verbindungspunkt und kann mehrere Ausnahmen auslösen. Eine Liste der möglichen Ausnahmen finden Sie im Abschnitt Ausnahmen.

Sie können den ProviderConnectionPoint Konstruktor aufrufen, um Eine eigene Instanz der ProviderConnectionPoint -Klasse zu erstellen. In Fällen, in denen Sie jedoch einfach eine Verbindung herstellen und die -Klasse nicht erweitern, sollten Sie die GetProviderConnectionPoints -Methode aufrufen, um ein vorhandenes Verbindungspunktobjekt von einem Anbieter zurückzugeben.

Gilt für:

Weitere Informationen