ConnectionProviderAttribute Classe

Definizione

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

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

Esempio

Nell'esempio di codice seguente viene illustrato l'uso della ConnectionProviderAttribute classe , illustrando come dichiarare l'elemento ConnectionProviderAttribute di metadati in un metodo di callback in un controllo provider. Si noti che viene usato l'overload più semplice del costruttore; viene fornito solo il valore del displayName parametro.

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

End Function 'GetConnectionInterface

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. Si noti che un metodo viene designato come metodo di callback con l'elemento ConnectionProviderAttribute 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 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.

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 la WebPartConnection classe e Web part Panoramica delle connessioni.

Il controllo del provider 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 tornare al consumer un'istanza di interfaccia che contiene dati. Per designare il metodo che funge da metodo di callback in un provider, è necessario aggiungere un ConnectionProviderAttribute elemento di metadati al metodo (l'elemento è basato sulla ConnectionProviderAttribute classe ).

Oltre a designare il metodo di callback in un provider, l'oggetto ConnectionProviderAttribute consente anche di specificare determinati dettagli sul punto di connessione di un provider. Un punto di connessione del provider è un'istanza della ProviderConnectionPoint classe che incapsula tutti i dettagli relativi a un provider necessario per stabilire una connessione, incluso il tipo di controllo del provider, se può connettersi a più consumer contemporaneamente, quale tipo di interfaccia serve al provider, dettagli sul metodo di callback e un nome visualizzato che rappresenta il punto di connessione del provider nell'interfaccia utente. Ogni connessione Web part include un punto di connessione del provider associato al controllo del provider.

Quando si aggiunge l'elemento ConnectionProviderAttribute di metadati al metodo di callback in un provider, è anche possibile usarlo per specificare i dettagli seguenti sul punto di connessione del provider: un nome visualizzato per il punto di connessione (per informazioni dettagliate, vedere la DisplayName proprietà ), se il provider può connettersi a più consumer contemporaneamente (per informazioni dettagliate, vedere la AllowsMultipleConnections proprietà ), ID per il punto di connessione (per informazioni dettagliate, vedere la ID proprietà) e il tipo del punto di connessione usato dal provider (per informazioni dettagliate, vedere la ConnectionPointType proprietà ). I quattro overload del costruttore per la ConnectionProviderAttribute 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 del provider può anche essere impostata a livello di codice; impostarli usando l'elemento ConnectionProviderAttribute è facoltativo.

Nota

Quando si aggiunge l'elemento ConnectionProviderAttribute di metadati a un metodo di callback in un provider, l'unico parametro obbligatorio che è sempre necessario specificare è il displayName parametro . Per informazioni dettagliate, vedere l'overload del ConnectionProviderAttribute(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 provider nell'interfaccia utente. Se si designano più metodi di callback in un controllo del provider, saranno disponibili più punti di connessione tra cui scegliere e quando si aggiunge l'elemento ConnectionProviderAttribute di metadati a ogni metodo di callback, è necessario specificare anche un valore per il id parametro, in modo che ogni punto di connessione del provider abbia un identificatore univoco noto.

Costruttori

ConnectionProviderAttribute(String)

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

ConnectionProviderAttribute(String, String)

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

ConnectionProviderAttribute(String, String, Type)

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

ConnectionProviderAttribute(String, Type)

Inizializza una nuova istanza della classe ConnectionProviderAttribute, definendo un nome visualizzato e un tipo di oggetto punto di connessione specifico da utilizzare per il punto di connessione provider.

Proprietà

AllowsMultipleConnections

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

ConnectionPointType

Ottiene il tipo di punto di connessione associato a un controllo provider.

DisplayName

Ottiene il nome descrittivo del punto di connessione provider.

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

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