ConnectionProviderAttribute Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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à
- 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 Panoramica delle WebPartConnection connessioni a classi e Web part.
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) |