Condividi tramite


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

Nell'esempio di codice seguente viene illustrato l'uso della ConnectionConsumerAttribute classe , illustrando come dichiarare l'elemento ConnectionConsumerAttribute di 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 di 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 che contiene 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 dell'interfaccia e elabora o visualizza i dati viene chiamato consumer. Per informazioni dettagliate sulle connessioni, vedere Panoramica delle WebPartConnection connessioni a classi e Web part.

Il controllo consumer in una connessione può essere un WebPart controllo o 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 è quello di 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 di metadati al metodo (l'elemento è basato sulla ConnectionConsumerAttribute classe ).

Oltre a designare 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, il tipo di interfaccia che il consumer può ricevere da un provider, i dettagli sul metodo di callback e un nome visualizzato che rappresenta il punto di connessione consumer nell'interfaccia utente. Ogni connessione web part include un punto di connessione consumer associato al controllo consumer.

Quando si aggiunge l'elemento ConnectionConsumerAttribute di 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 DisplayName proprietà), se il consumer può connettersi a più provider contemporaneamente (per informazioni dettagliate, vedere la AllowsMultipleConnections proprietà), ID per il punto di connessione (per informazioni dettagliate, vedere la ID proprietà) e il tipo di punto di connessione utilizzato 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ò essere impostata anche a livello di codice; impostarli usando l'elemento ConnectionConsumerAttribute è facoltativo.

Nota

Quando si aggiunge l'elemento ConnectionConsumerAttribute di metadati a un metodo di callback in un consumer, l'unico parametro obbligatorio che è necessario 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 del consumer nell'interfaccia utente. Se si designano più metodi di callback in un controllo consumer, saranno disponibili più punti di connessione tra cui scegliere e quando si aggiunge l'elemento ConnectionConsumerAttribute di 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 univoco noto.

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