ConnectionProviderAttribute Klasa

Definicja

Identyfikuje metodę wywołania zwrotnego w kontrolce serwera działającej jako dostawca w połączeniu składników Web Part i umożliwia deweloperom określenie szczegółów dotyczących punktu połączenia dostawcy.

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
Dziedziczenie
ConnectionProviderAttribute
Atrybuty

Przykłady

Poniższy przykład kodu pokazuje użycie ConnectionProviderAttribute klasy, pokazując sposób deklarowania ConnectionProviderAttribute elementu metadanych w metodzie wywołania zwrotnego w kontrolce dostawcy. Należy pamiętać, że jest używane najprostsze przeciążenie konstruktora; podano tylko wartość parametru displayName .

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

End Function 'GetConnectionInterface

W poniższych przykładach kodu pokazano, jak utworzyć podstawowe, statyczne połączenie między dwoma kontrolkami składników Web Part przy użyciu WebPartConnection klasy . Pliki kodu dostawcy i odbiorcy należy umieścić w folderze App_Code w folderze aplikacji, który zawiera stronę aspx.

W pierwszym przykładzie przedstawiono klasę działającą jako dostawca. Zwróć uwagę, że metoda jest wyznaczona jako metoda wywołania zwrotnego z elementem ConnectionProviderAttribute metadanych.

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

W drugim przykładzie pokazano klasę działającą jako odbiorca.

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

W ostatnim przykładzie przedstawiono stronę ASP.NET zawierającą dwa kontrolki.

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

Uwagi

Połączenie składników Web Part składa się z dwóch kontrolek serwera znajdujących się w WebPartZoneBase strefie i udostępniania danych za pomocą wystąpienia interfejsu przekazywanego z jednej kontrolki do drugiej. Kontrolka, która obsługuje wystąpienie interfejsu, jest nazywana dostawcą, a kontrolka, która odbiera wystąpienie interfejsu i przetwarza lub wyświetla dane, jest nazywana odbiorcą. Aby uzyskać szczegółowe informacje na temat połączeń, zobacz WebPartConnection omówienie klas i połączeń składników Web Part.

Kontrola dostawcy w połączeniu może być kontrolką WebPart lub dowolnym typem serwera lub kontrolki użytkownika, ale musi mieć metodę wyznaczoną jako metodę wywołania zwrotnego. Metoda wywołania zwrotnego jest wywoływana podczas procesu połączenia, a jej celem jest powrót do odbiorcy wystąpienia interfejsu zawierającego dane. Aby wyznaczyć metodę, która służy jako metoda wywołania zwrotnego w dostawcy, należy dodać ConnectionProviderAttribute element metadanych do metody (element jest oparty na ConnectionProviderAttribute klasie).

Oprócz wyznaczenia metody wywołania zwrotnego u dostawcy ConnectionProviderAttribute obiekt umożliwia również określenie pewnych szczegółów dotyczących punktu połączenia dostawcy. Punkt połączenia dostawcy to wystąpienie ProviderConnectionPoint klasy, która hermetyzuje wszystkie szczegóły dotyczące dostawcy potrzebnego do nawiązania połączenia, w tym typu kontroli dostawcy, czy może łączyć się z wieloma użytkownikami w tym samym czasie, jaki typ interfejsu służy konsumentom, szczegółowe informacje o metodzie wywołania zwrotnego oraz nazwa wyświetlana reprezentująca punkt połączenia dostawcy w interfejsie użytkownika. Każde połączenie składników Web Part zawiera punkt połączenia dostawcy skojarzony z kontrolą dostawcy.

Po dodaniu ConnectionProviderAttribute elementu metadanych do metody wywołania zwrotnego w dostawcy można również użyć go do określenia następujących szczegółów dotyczących punktu połączenia dostawcy: nazwy wyświetlanej punktu połączenia (aby uzyskać szczegółowe informacje, zobacz DisplayName właściwość), czy dostawca może połączyć się z wieloma konsumentami w tym samym czasie (aby uzyskać szczegółowe informacje, zobacz AllowsMultipleConnections właściwość), identyfikator punktu połączenia (aby uzyskać szczegółowe informacje, zobacz ID właściwość) i typ punktu połączenia używanego przez dostawcę (aby uzyskać szczegółowe informacje, zobacz ConnectionPointType właściwość). Cztery przeciążenia konstruktora dla ConnectionProviderAttribute klasy mają parametry, które umożliwiają określenie wartości co najmniej jednej z tych właściwości punktu połączenia po utworzeniu nowego wystąpienia klasy. Większość właściwości punktu połączenia dostawcy można również ustawić programowo; ustawienie ich przy użyciu ConnectionProviderAttribute elementu jest opcjonalne.

Uwaga

Po dodaniu ConnectionProviderAttribute elementu metadanych do metody wywołania zwrotnego w dostawcy jedynym wymaganym parametrem, który należy zawsze określić, jest displayName parametr (aby uzyskać szczegółowe informacje, zobacz przeciążenie konstruktora ConnectionProviderAttribute(String) ). Wartość tego parametru jest przypisywana do DisplayName właściwości, a gdy użytkownik otworzy interfejs użytkownika połączenia (utworzony przez ConnectionsZone kontrolkę), nazwa wyświetlana reprezentuje punkt połączenia dostawcy w interfejsie użytkownika. Jeśli wyznaczysz wiele metod wywołania zwrotnego w kontrolce dostawcy, będziesz mieć wiele możliwych punktów połączenia do wyboru, a po dodaniu ConnectionProviderAttribute elementu metadanych do każdej metody wywołania zwrotnego należy również określić wartość parametru id , aby każdy punkt połączenia dostawcy miał znany, unikatowy identyfikator.

Konstruktory

ConnectionProviderAttribute(String)

Inicjuje ConnectionProviderAttribute nowe wystąpienie klasy, określając nazwę wyświetlaną punktu połączenia dostawcy.

ConnectionProviderAttribute(String, String)

Inicjuje nowe wystąpienie ConnectionProviderAttribute klasy, określając nazwę wyświetlaną i identyfikator punktu połączenia dostawcy.

ConnectionProviderAttribute(String, String, Type)

Inicjuje nowe wystąpienie ConnectionProviderAttribute klasy, określając nazwę wyświetlaną, identyfikator i określony typ obiektu punktu połączenia do użycia dla punktu połączenia dostawcy.

ConnectionProviderAttribute(String, Type)

Inicjuje nowe wystąpienie ConnectionProviderAttribute klasy, określając nazwę wyświetlaną i określony typ obiektu punktu połączenia do użycia dla punktu połączenia dostawcy.

Właściwości

AllowsMultipleConnections

Pobiera lub ustawia wartość wskazującą, czy punkt połączenia zezwala na wiele połączeń.

ConnectionPointType

Pobiera typ punktu połączenia skojarzonego z kontrolą dostawcy.

DisplayName

Pobiera przyjazną nazwę punktu połączenia dostawcy.

DisplayNameValue

Pobiera lub ustawia ciąg używany jako wartość DisplayName właściwości do użycia w scenariuszach lokalizacji.

ID

Pobiera parametry reprezentujące unikatową tożsamość obiektu punktu połączenia dostawcy.

TypeId

Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego elementu Attribute.

(Odziedziczone po Attribute)

Metody

Equals(Object)

Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi.

(Odziedziczone po Attribute)
GetHashCode()

Zwraca wartość skrótu dla tego wystąpienia.

(Odziedziczone po Attribute)
GetType()

Type Pobiera bieżące wystąpienie.

(Odziedziczone po Object)
IsDefaultAttribute()

W przypadku zastąpienia w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną klasy pochodnej.

(Odziedziczone po Attribute)
Match(Object)

W przypadku zastąpienia w klasie pochodnej zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi.

(Odziedziczone po Attribute)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Jawne implementacje interfejsu

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Zestaw nazw jest mapowany na odpowiedni zestaw identyfikatorów wysyłania.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Pobiera informacje o typie obiektu, którego można użyć do pobrania informacji o typie interfejsu.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Pobiera informację o liczbie typów interfejsów, jakie zawiera obiekt (0 lub 1).

(Odziedziczone po Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Umożliwia dostęp do właściwości i metod udostępnianych przez obiekt.

(Odziedziczone po Attribute)

Dotyczy

Zobacz też