Udostępnij za pośrednictwem


ConsumerConnectionPoint Konstruktor

Definicja

Inicjuje nowe wystąpienie klasy 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)

Parametry

callbackMethod
MethodInfo

Metoda w kontrolce odbiorcy, która zwraca wystąpienie interfejsu do odbiorców w celu nawiązania połączenia.

interfaceType
Type

Interfejs Type odbierany przez użytkownika od dostawcy.

controlType
Type

Kontrolka Type konsumenta, z którą jest skojarzony punkt połączenia konsumenta.

displayName
String

Przyjazna nazwa wyświetlana punktu połączenia użytkownika, który jest wyświetlany użytkownikom w interfejsie użytkownika połączenia.

id
String

Unikatowy identyfikator punktu połączenia użytkownika.

allowsMultipleConnections
Boolean

Wartość logiczna wskazująca, czy punkt połączenia odbiorcy może mieć wiele równoczesnych połączeń z dostawcami.

Wyjątki

callbackMethod to null.

-lub-

interfaceType to null.

-lub-

controlType to null.

-lub-

displayName jest null lub pusty ciąg ("").

controlType nie jest tym samym typem co kontrolka odbiorcy (lub prawidłowa klasa pochodna).

Przykłady

Poniższy przykład kodu pokazuje, jak pochodzić z ConsumerConnectionPoint klasy w celu utworzenia niestandardowego punktu połączenia dostawcy.

Przykładowy kod ma trzy części:

  • Plik źródłowy zawierający kontrolkę dostawcy WebPart , kontrolkę konsumenta WebPart i obiekt niestandardowy ConsumerConnectionPoint .

  • Strona sieci Web, która hostuje kontrolki w połączeniu statycznym.

  • Wyjaśnienie sposobu uruchamiania przykładowego kodu.

Pierwsza część przykładu kodu to źródło kontrolek dostawcy i konsumentów WebPart oraz klasa niestandardowa ConsumerConnectionPoint o nazwie TableConsumerConnectionPoint. Należy pamiętać, że konstruktor TableConsumerConnectionPoint klasy wywołuje konstruktora podstawowego, przekazując mu wymagane parametry zgodnie z opisem w sekcji Parametry. Należy również zauważyć, że w TableConsumer klasie metoda jest określona jako metoda wywołania zwrotnego dla połączeń, a ConnectionConsumer atrybut deklaruje niestandardowy TableConsumerConnectionPoint jako SetConnectionInterface parametr. Pokazuje to, jak utworzyć niestandardowy punkt połączenia użytkownika, a następnie skojarzyć go z kontrolką konsumenta. W tym przykładzie przyjęto założenie, że kod źródłowy jest dynamicznie kompilowany, dlatego należy umieścić plik kodu źródłowego w podfolderze App_Code aplikacji internetowej.

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

Drugą częścią przykładu kodu jest strona sieci Web, która hostuje niestandardowe kontrolki w statycznym połączeniu składników Web Part. W górnej części strony znajduje Register się dyrektywa dotycząca deklarowania prefiksu i przestrzeni nazw dla kontrolek niestandardowych. Połączenie jest deklarowane przy użyciu <asp:webpartconnection> elementu, a kontrolki dostawcy i konsumenta są deklarowane w elememencie <asp:webpartzone> .

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

Załaduj stronę w przeglądarce. Połączenie między kontrolkami już istnieje, a konsument wyświetla dane od dostawcy, ponieważ połączenie zostało zadeklarowane jako połączenie statyczne na stronie.

Uwagi

Konstruktor ConsumerConnectionPoint klasy ConsumerConnectionPoint po prostu wywołuje konstruktora podstawowego, przekazując do niego różne parametry i inicjując klasę bazową.

Konstruktor klasy bazowej sprawdza liczbę parametrów punktu połączenia i może zgłosić kilka wyjątków. Aby uzyskać listę możliwych wyjątków, zobacz sekcję Wyjątki.

Konstruktor można wywołać, ConsumerConnectionPoint aby utworzyć własne wystąpienie ConsumerConnectionPoint klasy. Jednak w przypadkach, gdy po prostu nawiązujesz połączenie i nie rozszerzasz klasy, należy wywołać GetConsumerConnectionPoints metodę , aby zwrócić obiekt punktu połączenia od dostawcy.

Dotyczy

Zobacz też