ConnectionConsumerAttribute Classe

Definizione

Identifica il metodo di callback in un controllo server che funge da consumer in una connessione web part e consente agli sviluppatori di specificare i dettagli sul punto di connessione del consumer.

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
Ereditarietà
ConnectionConsumerAttribute
Attributi

Esempio

L'esempio di codice seguente illustra l'uso della classe, mostrando come dichiarare l'elemento ConnectionConsumerAttributeConnectionConsumerAttribute metadati in un metodo di callback in un controllo consumer. Si noti che viene usato l'overload più semplice del costruttore; viene fornito solo il valore del displayName parametro.

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

    End Sub
End Class

Gli esempi di codice seguenti illustrano come creare una connessione statica di base tra due controlli Web part usando la WebPartConnection classe . Il provider e i file di codice consumer devono essere inseriti nella cartella App_Code nella cartella dell'applicazione che contiene la pagina aspx.

Il primo esempio mostra una classe che funge da provider.

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

Il secondo esempio mostra una classe che funge da consumer. Si noti che un metodo viene designato come metodo di callback con l'elemento ConnectionConsumerAttribute metadati.

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

L'esempio finale mostra la pagina ASP.NET contenente i due controlli.

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

Commenti

Una connessione Web part è costituita da due controlli server che risiedono in una WebPartZoneBase zona e condividono i dati tramite un'istanza di interfaccia passata da un controllo all'altro. Il controllo che serve l'istanza dell'interfaccia viene chiamato provider e il controllo che riceve l'istanza e i processi dell'interfaccia o visualizza i dati vengono chiamati consumer. Per informazioni dettagliate sulle connessioni, vedere Panoramica delle WebPartConnection connessioni di classi e web part.

Il controllo consumer in una connessione può essere un WebPart controllo o un qualsiasi tipo di controllo server o utente, ma deve avere un metodo designato come metodo di callback. Il metodo di callback viene richiamato durante il processo di connessione e lo scopo è ricevere dal provider un'istanza dell'interfaccia che contiene dati. Per designare il metodo che funge da metodo di callback in un consumer, è necessario aggiungere un ConnectionConsumerAttribute elemento metadati al metodo (l'elemento è basato sulla ConnectionConsumerAttribute classe).

Oltre a progettare il metodo di callback in un consumer, l'oggetto ConnectionConsumerAttribute consente anche di specificare determinati dettagli sul punto di connessione di un consumer. Un punto di connessione consumer è un'istanza della ConsumerConnectionPoint classe che incapsula tutti i dettagli su un consumer necessario per stabilire una connessione, incluso il tipo di controllo del consumer, se può connettersi a più provider contemporaneamente, quale tipo di interfaccia il consumer può ricevere da un provider, dettagli sul metodo di callback e un nome visualizzato che rappresenta il punto di connessione consumer nell'interfaccia utente (UI). Ogni connessione web part include un punto di connessione consumer associato al controllo consumer.

Quando si aggiunge l'elemento ConnectionConsumerAttribute metadati al metodo di callback in un consumer, è anche possibile usarlo per specificare i dettagli seguenti sul punto di connessione consumer: un nome visualizzato per il punto di connessione (per informazioni dettagliate, vedere la proprietà), se il consumer può connettersi a più provider contemporaneamente (per informazioni dettagliate, vedere la DisplayNameAllowsMultipleConnections proprietà), ID per il punto di connessione (per informazioni dettagliate, vedere la ID proprietà) e il tipo del punto di connessione usato dal consumer (per informazioni dettagliate, vedere la ConnectionPointType proprietà). I quattro overload del costruttore per la ConnectionConsumerAttribute classe hanno parametri che consentono di specificare i valori per una o più di queste proprietà del punto di connessione quando viene creata una nuova istanza della classe. La maggior parte delle proprietà per un punto di connessione consumer può anche essere impostata a livello di codice; impostandoli usando l'elemento ConnectionConsumerAttribute è facoltativo.

Nota

Quando si aggiunge l'elemento metadati a un metodo di callback in un consumer, l'unico ConnectionConsumerAttribute parametro richiesto da specificare è sempre il displayName parametro (per informazioni dettagliate, vedere l'overload del ConnectionConsumerAttribute(String) costruttore). Il valore di questo parametro viene assegnato alla DisplayName proprietà e quando un utente apre l'interfaccia utente di connessione (creata dal ConnectionsZone controllo), il nome visualizzato rappresenta il punto di connessione consumer nell'interfaccia utente. Se si designano più metodi di callback in un controllo consumer, sono disponibili più punti di connessione possibili da scegliere e quando si aggiunge l'elemento ConnectionConsumerAttribute metadati a ogni metodo di callback, è necessario specificare anche un valore per il id parametro, in modo che ogni punto di connessione consumer abbia un identificatore noto e univoco.

Costruttori

ConnectionConsumerAttribute(String)

Inizializza una nuova istanza della classe ConnectionConsumerAttribute, specificando un nome visualizzato per il punto di connessione consumer.

ConnectionConsumerAttribute(String, String)

Inizializza una nuova istanza della classe ConnectionConsumerAttribute, specificando un nome visualizzato e un ID per il punto di connessione consumer.

ConnectionConsumerAttribute(String, String, Type)

Inizializza un'istanza nuova della classe ConnectionConsumerAttribute, specificando un nome visualizzato, un ID e un tipo specifico di oggetto punto di connessione da usare come punto di connessione consumer.

ConnectionConsumerAttribute(String, Type)

Inizializza una nuova istanza della classe ConnectionConsumerAttribute, specificando un nome visualizzato e un tipo specifico di oggetto punto di connessione da utilizzare per il punto di connessione consumer.

Proprietà

AllowsMultipleConnections

Ottiene o imposta un valore che indica se il punto di connessione consente connessioni multiple.

ConnectionPointType

Ottiene il tipo del punto di connessione consumer.

DisplayName

Ottiene il nome descrittivo del punto di connessione consumer.

DisplayNameValue

Ottiene o imposta la stringa utilizzata come valore della proprietà DisplayName, da utilizzare in scenari di localizzazione.

ID

Ottiene una stringa che rappresenta l'identità univoca del punto di connessione consumer.

TypeId

Quando è implementata in una classe derivata, ottiene un identificatore univoco della classe Attribute.

(Ereditato da Attribute)

Metodi

Equals(Object)

Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.

(Ereditato da Attribute)
GetHashCode()

Restituisce il codice hash per l'istanza.

(Ereditato da Attribute)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
IsDefaultAttribute()

In caso di override in una classe derivata, indica se il valore di questa istanza è il valore predefinito per la classe derivata.

(Ereditato da Attribute)
Match(Object)

Quando è sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza equivale a un oggetto specificato.

(Ereditato da Attribute)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

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

Esegue il mapping di un set di nomi a un set corrispondente di ID dispatch.

(Ereditato da Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera le informazioni sul tipo relative a un oggetto, che possono essere usate per ottenere informazioni sul tipo relative a un'interfaccia.

(Ereditato da Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera il numero delle interfacce di informazioni sul tipo fornite da un oggetto (0 o 1).

(Ereditato da Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornisce l'accesso a proprietà e metodi esposti da un oggetto.

(Ereditato da Attribute)

Si applica a

Vedi anche