Поделиться через


ProviderConnectionPoint Конструктор

Определение

Инициализирует новый экземпляр класса 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)

Параметры

callbackMethod
MethodInfo

Метод в элементе управления поставщика, возвращающий экземпляр интерфейса потребителям для установления подключения.

interfaceType
Type

Объект Type интерфейса, который поставщик обслуживает для потребителей.

controlType
Type

Объект Type элемента управления поставщика, с которым сопоставлена точка подключения поставщика.

displayName
String

Понятное отображаемое имя для точки подключения поставщика, которое видят пользователи в пользовательском интерфейсе подключения.

id
String

Уникальный идентификатор для точки подключения поставщика.

allowsMultipleConnections
Boolean

Логическое значение, указывающее может ли точка подключения поставщика иметь несколько одновременных подключений с потребителями.

Исключения

callbackMethod имеет значение null.

-или-

interfaceType имеет значение null.

-или-

controlType имеет значение null.

-или-

Параметр displayName имеет значение null или равен пустой строке ("").

Параметр controlType имеет тип, отличный от типа элемента управления поставщика (или производного от него допустимого класса).

Примеры

В следующем примере кода показано, как наследовать от ProviderConnectionPoint класса для создания пользовательской точки подключения поставщика.

Пример кода состоит из трех частей:

  • Исходный файл, содержащий элемент управления поставщика WebPart , элемент управления потребителя WebPart и пользовательский ProviderConnectionPoint объект.

  • Веб-страница, на которую размещаются элементы управления в статическом соединении.

  • Описание выполнения примера кода.

Первая часть примера кода — это источник элементов управления поставщиком и потребителем WebPart , а также пользовательский ProviderConnectionPoint класс с именем TableProviderConnectionPoint. Обратите внимание, что конструктор TableProviderConnectionPoint класса вызывает базовый конструктор, передавая ему необходимые параметры, как указано в разделе Параметры. Также обратите внимание, что в TableProviderWebPart классе метод указывается как метод обратного вызова для соединенийConnectionProvider, а атрибут объявляет настраиваемый TableProviderConnectionPoint в качестве GetConnectionInterface параметра. Здесь показано, как создать настраиваемую точку подключения поставщика, а затем связать ее с элементом управления поставщика. В этом примере предполагается, что исходный код компилируется динамически, поэтому файл исходного кода следует поместить во вложенную папку App_Code веб-приложения.

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

Вторая часть примера кода — это веб-страница, на котором размещаются пользовательские элементы управления в статическом подключении веб-частей. В верхней части страницы находится директива Register для объявления префикса и пространства имен для пользовательских элементов управления. Соединение объявляется с помощью <asp:webpartconnection> элемента , а элементы управления поставщиком и потребителем объявляются в элементе <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>

Загрузите страницу в браузере. Соединение между элементами управления уже существует, и потребитель отображает данные от поставщика, так как соединение было объявлено как статическое соединение на странице.

Комментарии

Конструктор ProviderConnectionPoint класса ProviderConnectionPoint просто вызывает базовый конструктор, передавая ему различные параметры и инициализируя базовый класс.

Конструктор базового класса проверяет ряд параметров для точки соединения и может вызывать несколько исключений. Список возможных исключений см. в разделе Исключения.

Можно вызвать ProviderConnectionPoint конструктор для создания собственного экземпляра ProviderConnectionPoint класса . Однако в случаях, когда вы просто устанавливаете соединение, а не расширяете класс , следует вызвать GetProviderConnectionPoints метод , чтобы вернуть существующий объект точки подключения от поставщика.

Применяется к

См. также раздел