ConnectionConsumerAttribute 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
識別 Web 組件連接之消費者伺服器控制項的回呼方法,並讓開發人員指定消費者連接點的細節。
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
- 繼承
- 屬性
範例
下列程式代碼範例示範如何使用 類別,示範如何在取用 ConnectionConsumerAttribute 者控件的回呼方法上宣告 ConnectionConsumerAttribute
元數據專案。 請注意,會使用建構函式的最簡單多載; displayName
只提供參數值。
[ConnectionConsumer("Row")]
public void SetConnectionInterface(IWebPartRow provider)
{
_provider = provider;
}
<ConnectionConsumer("Row")> _
Public Sub SetConnectionInterface(ByVal provider As IWebPartRow)
_provider = provider
End Sub
End Class
下列程式代碼範例示範如何使用 類別,在兩個網頁元件控件 WebPartConnection 之間建立基本的靜態連線。 提供者和取用者程式代碼檔案應該放在包含.aspx頁面的應用程式資料夾下App_Code資料夾。
第一個範例示範做為提供者的類別。
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
第二個範例顯示做為取用者的類別。 請注意,方法會指定為具有元數據元素的 ConnectionConsumerAttribute
回呼方法。
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 控制項或任何類型的伺服器或使用者控制項,但必須有指定為回呼方法的方法。 回呼方法會在連接程式期間叫用,其用途是從提供者接收包含數據的介面實例。 若要指定做為取用者中回呼方法的方法,您必須將元數據元素新增 ConnectionConsumerAttribute
至 方法, (專案是以 類別) 為基礎 ConnectionConsumerAttribute 。
除了在取用者中指定回呼方法之外, ConnectionConsumerAttribute 物件也可讓您指定取用者連接點的特定詳細數據。 取用者連接點是 類別的 ConsumerConnectionPoint 實例,封裝建立連接所需的取用者所有詳細數據,包括取用者的控件類型、是否可以同時連接到多個提供者、取用者可以從提供者接收的介面類型、回呼方法的詳細數據,以及代表使用者介面中取用者連接點的顯示名稱, (UI) 。 每個網頁元件連接都包含與取用者控制項相關聯的取用者連接點。
當您在 ConnectionConsumerAttribute
取用者中將元數據元素新增至回呼方法時,也可以使用它來指定關於取用者連接點的下列詳細數據:連接點的顯示名稱 (以取得詳細數據,請參閱 DisplayName 屬性) 、取用者是否可以同時連線到多個提供者, (以取得詳細數據, AllowsMultipleConnections 如需詳細資訊,請參閱屬性) 、連接點的標識碼 (、請參閱 ID 屬性) ,以及取用者使用 (的連接點類型以取得詳細數據,請參閱 ConnectionPointType 屬性) 。 類別的四個建構 ConnectionConsumerAttribute 函式多載各有參數,可讓您在建立類別的新實例時指定一或多個這些連接點屬性的值。 您也可以以程式設計方式設定取用者連接點的大部分屬性;使用 ConnectionConsumerAttribute
元素進行設定是選擇性的。
注意
當您將 ConnectionConsumerAttribute
元數據元素新增至取用者中的回呼方法時,您一律必須指定的唯一必要參數是 displayName
參數 (,請參閱 ConnectionConsumerAttribute(String) 建構函式多載) 。 此參數的值會指派給 DisplayName 屬性,當用戶開啟控件所建立 ConnectionsZone 的連接UI () 時,顯示名稱代表UI中的取用者連接點。 如果您在取用者控件中指定多個回呼方法,您將有多個可能的連接點可供選擇,而且當您將元數據元素新增 ConnectionConsumerAttribute
至每個回呼方法時,也應該指定 參數的值 id
,讓每個取用者連接點都有已知的唯一標識符。
建構函式
ConnectionConsumerAttribute(String) |
初始化 ConnectionConsumerAttribute 類別的新執行個體,並指定消費者連接點的顯示名稱。 |
ConnectionConsumerAttribute(String, String) |
初始化 ConnectionConsumerAttribute 類別的新執行個體,並指定消費者連接點的顯示名稱和 ID。 |
ConnectionConsumerAttribute(String, String, Type) |
將 ConnectionConsumerAttribute 類別的新執行個體初始化,指定要用於消費者連接點的顯示名稱、識別碼和特定類型的連接點物件。 |
ConnectionConsumerAttribute(String, Type) |
初始化 ConnectionConsumerAttribute 類別的新執行個體,並指定要用於消費者連接點的顯示名稱和連接點物件的特定型別。 |
屬性
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) |