Udostępnij za pośrednictwem


ConnectionConsumerAttribute Klasa

Definicja

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

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

Przykłady

Poniższy przykład kodu pokazuje użycie ConnectionConsumerAttribute klasy , pokazując, jak zadeklarować ConnectionConsumerAttribute element metadanych w metodzie wywołania zwrotnego w kontrolce konsumenta. Należy pamiętać, że jest używane najprostsze przeciążenie konstruktora; zostanie podana tylko wartość parametru 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

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 powinny zostać umieszczone w folderze App_Code w folderze aplikacji zawierającym stronę .aspx.

Pierwszy przykład przedstawia klasę działającą jako dostawca.

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. Zwróć uwagę, że metoda jest wyznaczona jako metoda wywołania zwrotnego z elementem ConnectionConsumerAttribute 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 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 pokazano stronę ASP.NET zawierającą dwie 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.

Kontrolka konsumenta 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 odbieranie od dostawcy wystąpienia interfejsu zawierającego dane. Aby wyznaczyć metodę, która służy jako metoda wywołania zwrotnego w odbiorcy, należy dodać ConnectionConsumerAttribute element metadanych do metody (element jest oparty na ConnectionConsumerAttribute klasie).

Oprócz wyznaczenia metody wywołania zwrotnego w odbiorcy ConnectionConsumerAttribute obiekt umożliwia również określenie pewnych szczegółów dotyczących punktu połączenia użytkownika. Punkt połączenia klienta jest wystąpieniem ConsumerConnectionPoint klasy, która hermetyzuje wszystkie szczegóły dotyczące konsumenta potrzebnego do nawiązania połączenia, w tym typu kontrolki konsumenta, czy może łączyć się z wieloma dostawcami w tym samym czasie, jaki typ interfejsu odbiorca może odbierać od dostawcy, szczegółowe informacje o metodzie wywołania zwrotnego i nazwa wyświetlana reprezentująca punkt połączenia użytkownika w interfejsie użytkownika. Każde połączenie składników Web Part zawiera punkt połączenia użytkownika skojarzony z kontrolką konsumenta.

Po dodaniu ConnectionConsumerAttribute elementu metadanych do metody wywołania zwrotnego w odbiorcy można również użyć go do określenia następujących szczegółów dotyczących punktu połączenia odbiorcy: nazwy wyświetlanej punktu połączenia (aby uzyskać szczegółowe informacje, zobacz DisplayName właściwość), czy użytkownik może połączyć się z wieloma dostawcami 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 użytkownika (aby uzyskać szczegółowe informacje, zobacz ConnectionPointType właściwość ). Cztery przeciążenia konstruktora dla ConnectionConsumerAttribute klasy mają parametry, które umożliwiają określenie wartości dla co najmniej jednej z tych właściwości punktu połączenia podczas tworzenia nowego wystąpienia klasy. Większość właściwości punktu połączenia użytkownika można również ustawić programowo; ustawienie ich przy użyciu ConnectionConsumerAttribute elementu jest opcjonalne.

Uwaga

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

Konstruktory

ConnectionConsumerAttribute(String)

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

ConnectionConsumerAttribute(String, String)

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

ConnectionConsumerAttribute(String, String, Type)

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

ConnectionConsumerAttribute(String, Type)

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

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 odbiorcy.

DisplayName

Pobiera przyjazną nazwę punktu połączenia użytkownika.

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ść punktu połączenia odbiorcy.

TypeId

Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego Attributeelementu .

(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 wartość bieżącego wystąpienia.

(Odziedziczone po Object)
IsDefaultAttribute()

Podczas zastępowania w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną dla klasy pochodnej.

(Odziedziczone po Attribute)
Match(Object)

Po przesłonięciu 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 dla obiektu, który może służyć do pobierania informacji o typie dla 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ż