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


ConnectionConsumerAttribute Класс

Определение

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

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

Примеры

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

[ConnectionConsumer("Row")]
public void SetConnectionInterface(IWebPartRow provider) 
{
    _provider = provider;
}
    <ConnectionConsumer("Row")> _
    Public Sub SetConnectionInterface(ByVal provider As IWebPartRow)
        _provider = provider

    End Sub
End Class

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

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

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

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

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 серверного или пользовательского элемента управления, но он должен иметь метод, назначенный в качестве метода обратного вызова. Метод обратного вызова вызывается во время процесса подключения, и его назначение — получение от поставщика экземпляра интерфейса, содержащего данные. Чтобы назначить метод, который служит методом обратного вызова в объекте-получателе, необходимо добавить ConnectionConsumerAttribute элемент метаданных в метод (элемент основан на ConnectionConsumerAttribute классе ).

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

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

Примечание

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

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

ConnectionConsumerAttribute(String)

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

ConnectionConsumerAttribute(String, String)

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

ConnectionConsumerAttribute(String, String, Type)

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

ConnectionConsumerAttribute(String, Type)

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

Свойства

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)

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

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