ConnectionProviderAttribute 類別

定義

識別 Web 組件連接之提供者伺服器控制項的回呼方法,並讓開發人員指定提供者連接點的細節。

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
繼承
ConnectionProviderAttribute
屬性

範例

下列程式碼範例示範如何使用 ConnectionProviderAttribute 類別,示範如何在提供者控制項的回呼方法上宣告 ConnectionProviderAttribute 中繼資料專案。 請注意,會使用建構函式的最簡單多載; displayName 只提供參數值。

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

End Function 'GetConnectionInterface

下列程式碼範例示範如何使用 類別,在兩個網頁元件控制項 WebPartConnection 之間建立基本的靜態連線。 提供者和取用者程式碼檔案應該放在包含 .aspx 頁面的應用程式資料夾下App_Code資料夾。

第一個範例示範做為提供者的類別。 請注意,方法會指定為具有中繼資料元素的 ConnectionProviderAttribute 回呼方法。

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

第二個範例顯示做為取用者的類別。

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

最後一個範例顯示包含兩個控制項的 ASP.NET 網頁。

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

備註

網頁元件連線是由位於 WebPartZoneBase 區域中的兩個伺服器控制項所組成,並透過從一個控制項傳遞至另一個控制項的介面實例來共用資料。 提供介面實例的控制項稱為提供者,而接收介面實例和進程的控制項或顯示資料稱為取用者。 如需連線的詳細資訊,請參閱 WebPartConnection 類別和 Web 元件連線概觀

連接中的提供者控制項可以是 WebPart 控制項或任何類型的伺服器或使用者控制項,但必須有指定為回呼方法的方法。 回呼方法會在連接程式期間叫用,其用途是傳回給取用者包含資料的介面實例。 若要指定做為提供者中回呼方法的方法,您必須將中繼資料元素新增 ConnectionProviderAttribute 至 方法, (專案是以 類別) 為基礎 ConnectionProviderAttribute

除了在提供者中指定回呼方法之外, ConnectionProviderAttribute 物件也可讓您指定提供者連接點的特定詳細資料。 提供者連接點是 類別的 ProviderConnectionPoint 實例,封裝建立連接所需的提供者所有詳細資料,包括提供者的控制項類型、它是否可以同時連接到多個取用者、提供者提供給取用者的介面類別型、回呼方法的詳細資料,以及代表使用者介面中提供者連接點的顯示名稱, (UI) 。 每個網頁元件連線都包含與提供者控制項相關聯的提供者連接點。

當您將 ConnectionProviderAttribute 中繼資料元素新增至提供者中的回呼方法時,您也可以使用它來指定提供者連接點的下列詳細資料:連接點的顯示名稱 (以取得詳細資料,請參閱 DisplayName 屬性) ,提供者是否可以同時連線到多個取用者 (以取得詳細資料, AllowsMultipleConnections 如需詳細資訊,請參閱屬性) 、連接點的識別碼 (、請參閱 ID 屬性) ,以及提供者使用 (的連接點類型以取得詳細資料,請參閱 ConnectionPointType 屬性) 。 類別的四個建構 ConnectionProviderAttribute 函式多載各有參數,可讓您在建立類別的新實例時指定一或多個這些連接點屬性的值。 提供者連接點的大部分屬性也可以以程式設計方式設定;使用 ConnectionProviderAttribute 元素進行設定是選擇性的。

注意

當您將 ConnectionProviderAttribute 中繼資料元素新增至提供者中的回呼方法時,您一律必須指定的唯一必要參數是 displayName 參數 (,請參閱 ConnectionProviderAttribute(String) 建構函式多載) 。 此參數的值會指派給 DisplayName 屬性,而且當使用者開啟控制項所建立 ConnectionsZone 的連接 UI () 時,顯示名稱代表 UI 中的提供者連接點。 如果您在提供者控制項中指定多個回呼方法,您將有多個可能的連接點可供選擇,而且當您將中繼資料元素新增 ConnectionProviderAttribute 至每個回呼方法時,也應該指定 參數的值 id ,讓每個提供者連接點都有已知的唯一識別碼。

建構函式

ConnectionProviderAttribute(String)

初始化 ConnectionProviderAttribute 類別的新執行個體,並指定提供者連接點的顯示名稱。

ConnectionProviderAttribute(String, String)

初始化 ConnectionProviderAttribute 類別的新執行個體,並指定提供者連接點的顯示名稱和 ID。

ConnectionProviderAttribute(String, String, Type)

ConnectionProviderAttribute 類別的新執行個體初始化,指定要用於提供者連接點的顯示名稱、識別碼和特定類型的連接點物件。

ConnectionProviderAttribute(String, Type)

初始化 ConnectionProviderAttribute 類別的新執行個體,並指定要用於提供者連接點的顯示名稱和連接點物件的特定型別。

屬性

AllowsMultipleConnections

取得或設定值,指出連接點是否允許多個連接。

ConnectionPointType

取得與提供者控制項關聯的連接點型別。

DisplayName

取得提供者連接點的易記名稱。

DisplayNameValue

取得或設定字串,適用於當地語系化案例中做為 DisplayName 屬性的值。

ID

取得字串,表示提供者連接點物件的唯一識別。

TypeId

在衍生類別中實作時,取得這個 Attribute 的唯一識別碼。

(繼承來源 Attribute)

方法

Equals(Object)

傳回值,這個值指出此執行個體是否與指定的物件相等。

(繼承來源 Attribute)
GetHashCode()

傳回這個執行個體的雜湊碼。

(繼承來源 Attribute)
GetType()

取得目前執行個體的 Type

(繼承來源 Object)
IsDefaultAttribute()

在衍生類別中覆寫時,表示這個執行個體的值是衍生類別的預設值。

(繼承來源 Attribute)
Match(Object)

在衍生類別中覆寫時,會傳回值,表示這個執行個體是否等於指定物件。

(繼承來源 Attribute)
MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
ToString()

傳回代表目前物件的字串。

(繼承來源 Object)

明確介面實作

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

將一組名稱對應至一組對應的分派識別項 (Dispatch Identifier)。

(繼承來源 Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

擷取物件的類型資訊,可以用來取得介面的類型資訊。

(繼承來源 Attribute)
_Attribute.GetTypeInfoCount(UInt32)

擷取物件提供的類型資訊介面數目 (0 或 1)。

(繼承來源 Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

提供物件所公開的屬性和方法的存取權。

(繼承來源 Attribute)

適用於

另請參閱