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
элемента метаданных в методе обратного вызова в элементе управления поставщиком. Обратите внимание, что используется самая простая перегрузка конструктора; 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 разделе "Общие сведения о классах" и веб-части Connections.
Элемент управления поставщиком в соединении может быть элементом управления или любым типом WebPart сервера или пользовательского элемента управления, но он должен иметь метод, назначенный в качестве метода обратного вызова. Метод обратного вызова вызывается во время процесса подключения, и его назначение — возврат к потребителю экземпляра интерфейса, содержащего данные. Чтобы назначить метод, который служит методом обратного вызова в поставщике, необходимо добавить ConnectionProviderAttribute
в метод элемент метаданных (элемент основан на ConnectionProviderAttribute классе).
Помимо назначения метода обратного вызова в поставщике ConnectionProviderAttribute , объект также позволяет указать определенные сведения о точке подключения поставщика. Точка подключения поставщика — это экземпляр ProviderConnectionPoint класса, который инкапсулирует все сведения о поставщике, необходимом для установления соединения, включая тип элемента управления поставщика, возможность подключения к нескольким потребителям одновременно, тип интерфейса, который поставщик обслуживает потребителям, сведения о методе обратного вызова и отображаемое имя, представляющее точку подключения поставщика в пользовательском интерфейсе. Каждое подключение веб-части включает точку подключения поставщика, связанную с элементом управления поставщиком.
При добавлении ConnectionProviderAttribute
элемента метаданных в метод обратного вызова в поставщике его также можно использовать для указания следующих сведений о точке подключения поставщика: отображаемое имя точки подключения (дополнительные сведения см DisplayName . в свойстве), может ли поставщик подключаться к нескольким потребителям одновременно (дополнительные сведения см. в свойстве AllowsMultipleConnections ). Идентификатор точки подключения (дополнительные сведения см. в свойстве ID ) и тип точки подключения, которую использует поставщик (дополнительные сведения см. в свойстве ConnectionPointType ). Четыре перегрузки конструктора для ConnectionProviderAttribute класса имеют параметры, позволяющие указать значения для одного или нескольких из этих свойств точки подключения при создании нового экземпляра класса. Большинство свойств точки подключения поставщика также можно задать программным способом; установка их с помощью ConnectionProviderAttribute
элемента является необязательным.
Примечание
При добавлении ConnectionProviderAttribute
элемента метаданных в метод обратного вызова в поставщике единственным обязательным параметром, который необходимо всегда указать, является displayName
параметр (дополнительные сведения см. в разделе перегрузки ConnectionProviderAttribute(String) конструктора). Значение этого параметра назначается свойству DisplayName , а когда пользователь открывает пользовательский интерфейс подключения (созданный элементом ConnectionsZone управления), отображаемое имя представляет точку подключения поставщика в пользовательском интерфейсе. При назначении нескольких методов обратного вызова в элементе управления поставщиком у вас будет несколько возможных точек подключения и при добавлении ConnectionProviderAttribute
элемента метаданных в каждый метод обратного вызова необходимо также указать значение параметра id
, чтобы каждая точка подключения поставщика была известна, уникальный идентификатор.
Конструкторы
ConnectionProviderAttribute(String) |
Инициализирует новый экземпляр класса ConnectionProviderAttribute, указывая отображаемое имя для точки подключения поставщика. |
ConnectionProviderAttribute(String, String) |
Инициализирует новый экземпляр класса ConnectionProviderAttribute, указывая отображаемое имя и идентификатор для точки подключения поставщика. |
ConnectionProviderAttribute(String, String, Type) |
Инициализирует новый экземпляр класса ConnectionProviderAttribute, указывая отображаемое имя, идентификатор и определенный тип объекта точки подключения для использования с точкой подключения поставщика. |
ConnectionProviderAttribute(String, Type) |
Инициализирует новый экземпляр класса 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) |