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


ConnectionProviderAttribute Класс

Определение

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

public ref class ConnectionProviderAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Method)]
public class ConnectionProviderAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Method)>]
type ConnectionProviderAttribute = class
    inherit Attribute
Public Class ConnectionProviderAttribute
Inherits Attribute
Наследование
ConnectionProviderAttribute
Атрибуты

Примеры

В следующем примере кода показано использование ConnectionProviderAttribute класса, в котором показано, как объявить ConnectionProviderAttribute элемент метаданных в методе обратного вызова в элементе управления поставщиком. Обратите внимание, что используется самая простая перегрузка конструктора; displayName предоставляется только значение параметра.

[ConnectionProvider("Row")]
public IWebPartRow GetConnectionInterface()
{
    return new RowProviderWebPart();
}
<ConnectionProvider("Row")> _
Public Function GetConnectionInterface() As IWebPartRow
    Return New RowProviderWebPart()

End Function 'GetConnectionInterface

В следующих примерах кода показано, как создать базовое статичное соединение между двумя элементами управления веб-частей с помощью WebPartConnection класса. Файлы кода поставщика и потребителя должны быть помещены в папку App_Code в папку приложения, содержащую страницу .aspx.

В первом примере показан класс, действующий в качестве поставщика. Обратите внимание, что метод назначается как метод обратного вызова с элементом ConnectionProviderAttribute метаданных.

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Reflection;
using System.Web.UI;
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 row data.
namespace My 
{
    public sealed class RowProviderWebPart : WebPart, IWebPartRow 
    {

        private DataTable _table;

        public RowProviderWebPart() 
        {
            _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);
        }
        [ConnectionProvider("Row")]
        public IWebPartRow GetConnectionInterface()
        {
            return new RowProviderWebPart();
        }
        public PropertyDescriptorCollection Schema 
        {
            get {
                return TypeDescriptor.GetProperties(_table.DefaultView[0]);
                }
        }
        public void GetRowData(RowCallback callback)
        {
            callback(_table.Rows);
        }
    }
}
Imports System.Collections
Imports System.ComponentModel
Imports System.Data
Imports System.Reflection
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts

'This sample code creates a Web Parts control that acts as a provider of row data.
Namespace MyCustomWebPart

    Public NotInheritable Class RowProviderWebPart
        Inherits WebPart
        Implements IWebPartRow

        Private _table As DataTable


        Public Sub New()
            _table = New DataTable()

            Dim col As New DataColumn()
            col.DataType = GetType(String)
            col.ColumnName = "Name"
            _table.Columns.Add(col)

            col = New DataColumn()
            col.DataType = GetType(String)
            col.ColumnName = "Address"
            _table.Columns.Add(col)

            col = New DataColumn()
            col.DataType = GetType(Integer)
            col.ColumnName = "ZIP Code"
            _table.Columns.Add(col)

            Dim row As DataRow = _table.NewRow()
            row("Name") = "John Q. Public"
            row("Address") = "123 Main Street"
            row("ZIP Code") = 98000
            _table.Rows.Add(row)

        End Sub

        <ConnectionProvider("Row")> _
        Public Function GetConnectionInterface() As IWebPartRow
            Return New RowProviderWebPart()

        End Function 'GetConnectionInterface

        Public ReadOnly Property Schema() As PropertyDescriptorCollection _
            Implements IWebPartRow.Schema
            Get
                Return TypeDescriptor.GetProperties(_table.DefaultView(0))
            End Get
        End Property

        Public Sub GetRowData(ByVal callback As RowCallback) _
            Implements IWebPartRow.GetRowData
            callback(_table.Rows)

        End Sub
    End Class

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

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Reflection;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
// This sample code creates a Web Parts control that acts as a consumer of row data.
namespace My 
{

    public sealed class RowConsumerWebPart : WebPart {
        private IWebPartRow _provider;
        private ICollection _tableData;
    
            private void GetRowData(object rowData)
            {
                _tableData = (ICollection)rowData;
            }

        protected override void OnPreRender(EventArgs e)
        {
                if (_provider != null)
                {
                    _provider.GetRowData(new RowCallback(GetRowData));
                }
        }

        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("Row")]
        public void SetConnectionInterface(IWebPartRow provider) 
        {
            _provider = provider;
        }
         }
    }
//}
Imports System.Collections
Imports System.ComponentModel
Imports System.Data
Imports System.Reflection
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts

' This sample code creates a Web Parts control that acts as a consumer of row data.
Namespace MyCustomWebPart

    Public NotInheritable Class RowConsumerWebPart
        Inherits WebPart
        Private _provider As IWebPartRow
        Private _tableData As ICollection


        Private Sub GetRowData(ByVal rowData As Object)
            _tableData = CType(rowData, ICollection)

        End Sub


        Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
            If Not (_provider Is Nothing) Then
                '        _provider.GetRowData(AddressOf (New RowCallback(GetRowData)))
                _provider.GetRowData(AddressOf GetRowData)
                '    _provider.GetRowData(New RowCallback(AddressOf GetRowData))
            End If

        End Sub



        Protected Overrides Sub RenderContents(ByVal writer As HtmlTextWriter)
            If Not (_provider Is Nothing) Then
                Dim props As PropertyDescriptorCollection = _provider.Schema
                Dim count As Integer = 0
                If Not (props Is Nothing) AndAlso props.Count > 0 AndAlso Not (_tableData Is Nothing) Then
                    Dim prop As PropertyDescriptor
                    For Each prop In props
                        Dim o As DataRow
                        For Each o In _tableData
                            writer.Write(prop.DisplayName & ": " & o(count))
                            writer.WriteBreak()
                            writer.WriteLine()
                            count = count + 1
                        Next o
                    Next prop
                Else
                    writer.Write("No data")
                End If
            Else
                writer.Write("Not connected")
            End If

        End Sub

        <ConnectionConsumer("Row")> _
        Public Sub SetConnectionInterface(ByVal provider As IWebPartRow)
            _provider = provider

        End Sub
    End Class

В последнем примере показана страница ASP.NET, содержащая два элемента управления.

<%@ page language="C#" %>
<%@ register TagPrefix="my" Namespace="My" %>

<!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>IRow Test Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <!-- A static or dynamic connection is required to link two Web Parts controls. --->
        <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>
                <!-- The following two lines specify the two connected controls. --->
                <my:RowProviderWebPart ID="provider1" runat="server" ToolTip="Row Provider Control" />
                <my:RowConsumerWebPart ID="consumer1" runat="server" ToolTip="Row Consumer Control" />
            </ZoneTemplate>
        </asp:webpartzone>
    </div>
    </form>
</body>
</html>
<%@ page language="VB" %>
<%@ Register TagPrefix="my" Namespace="MyCustomWebPart" %>

<!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>IRow Test Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <!-- A static or dynamic connection is required to link two Web Parts controls. --->
        <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>
                <my:RowProviderWebPart ID="provider1" runat="server" ToolTip="Row Provider Control" />
                <my:RowConsumerWebPart ID="consumer1" runat="server" ToolTip="Row Consumer Control" />
           </ZoneTemplate>
        </asp:webpartzone>
    </div>
    </form>
</body>
</html>

Комментарии

Подключение веб-частей состоит из двух серверных элементов управления, находящихся в WebPartZoneBase зоне и совместного использования данных с помощью экземпляра интерфейса, передаваемого из одного элемента управления в другой. Элемент управления, обслуживающий экземпляр интерфейса, называется поставщиком, а элемент управления, получающий экземпляр интерфейса и процессы или отображающий данные, называется потребителем. Дополнительные сведения о подключениях см. в WebPartConnection разделе "Общие сведения о классах и подключениях веб-частей".

Элемент управления поставщиком в соединении может быть элементом управления или любым типом WebPart сервера или пользовательского элемента управления, но он должен иметь метод, назначенный как метод обратного вызова. Метод обратного вызова вызывается во время процесса подключения, а его назначение — вернуться к потребителю экземпляру интерфейса, который содержит данные. Чтобы назначить метод обратного вызова в поставщике, необходимо добавить ConnectionProviderAttribute элемент метаданных в метод (элемент основан на ConnectionProviderAttribute классе).

Помимо назначения метода обратного вызова в поставщике, ConnectionProviderAttribute объект также позволяет указать определенные сведения о точке подключения поставщика. Точка подключения поставщика — это экземпляр ProviderConnectionPoint класса, который инкапсулирует все сведения о поставщике, необходимом для установления подключения, включая тип элемента управления поставщика, может ли он подключаться к нескольким потребителям одновременно, какой тип интерфейса поставщик обслуживает потребителям, сведения о методе обратного вызова и отображаемое имя, представляющее точку подключения поставщика в пользовательском интерфейсе. Каждое подключение веб-частей включает точку подключения поставщика, связанную с элементом управления поставщиком.

При добавлении ConnectionProviderAttribute элемента метаданных в метод обратного вызова в поставщике также можно указать следующие сведения о точке подключения поставщика: отображаемое имя точки подключения (дополнительные сведения см DisplayName . в свойстве), может ли поставщик подключаться к нескольким потребителям одновременно (дополнительные сведения см. в свойстве AllowsMultipleConnections ). Идентификатор точки подключения (дополнительные сведения см ID . в свойстве) и тип точки подключения, используемой поставщиком (дополнительные сведения см. в свойстве ConnectionPointType ). Четыре перегрузки конструктора для ConnectionProviderAttribute класса имеют параметры, позволяющие указать значения для одного или нескольких этих свойств точки подключения при создании нового экземпляра класса. Большинство свойств точки подключения поставщика также можно задать программным способом; при настройке ConnectionProviderAttribute их с помощью элемента является необязательным.

Замечание

При добавлении элемента метаданных в метод обратного вызова в поставщике единственным обязательным параметром, который всегда необходимо указать ConnectionProviderAttribute , является displayName параметр (дополнительные сведения см. в разделе перегрузки конструктора ConnectionProviderAttribute(String) ). Значение этого параметра назначается DisplayName свойству, а когда пользователь открывает пользовательский интерфейс подключения (созданный ConnectionsZone элементом управления), отображаемое имя представляет точку подключения поставщика в пользовательском интерфейсе. При назначении нескольких методов обратного вызова в элементе управления поставщиком у вас будет несколько возможных точек подключения и при добавлении ConnectionProviderAttribute элемента метаданных к каждому методу обратного вызова необходимо также указать значение для id параметра, чтобы у каждой точки подключения поставщика был известный уникальный идентификатор.

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

Имя Описание
ConnectionProviderAttribute(String, String, Type)

Инициализирует новый экземпляр ConnectionProviderAttribute класса, указывая отображаемое имя, идентификатор и определенный тип объекта точки подключения, используемый для точки подключения поставщика.

ConnectionProviderAttribute(String, String)

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

ConnectionProviderAttribute(String, Type)

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

ConnectionProviderAttribute(String)

Инициализирует новый экземпляр ConnectionProviderAttribute класса, указав отображаемое имя для точки подключения поставщика.

Свойства

Имя Описание
AllowsMultipleConnections

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

ConnectionPointType

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

DisplayName

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

DisplayNameValue

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

ID

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

TypeId

При реализации в производном классе получает уникальный идентификатор для этого Attribute.

(Унаследовано от Attribute)

Методы

Имя Описание
Equals(Object)

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

(Унаследовано от Attribute)
GetHashCode()

Возвращает хэш-код для этого экземпляра.

(Унаследовано от Attribute)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
IsDefaultAttribute()

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

(Унаследовано от Attribute)
Match(Object)

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

(Унаследовано от Attribute)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Явные реализации интерфейса

Имя Описание
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.

(Унаследовано от Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Извлекает сведения о типе объекта, который можно использовать для получения сведений о типе для интерфейса.

(Унаследовано от Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).

(Унаследовано от Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Предоставляет доступ к свойствам и методам, предоставляемым объектом.

(Унаследовано от Attribute)

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

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