ProviderConnectionPoint 建構函式
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
初始化 ProviderConnectionPoint 類別的新執行個體。
public:
ProviderConnectionPoint(System::Reflection::MethodInfo ^ callbackMethod, Type ^ interfaceType, Type ^ controlType, System::String ^ displayName, System::String ^ id, bool allowsMultipleConnections);
public ProviderConnectionPoint (System.Reflection.MethodInfo callbackMethod, Type interfaceType, Type controlType, string displayName, string id, bool allowsMultipleConnections);
new System.Web.UI.WebControls.WebParts.ProviderConnectionPoint : System.Reflection.MethodInfo * Type * Type * string * string * bool -> System.Web.UI.WebControls.WebParts.ProviderConnectionPoint
Public Sub New (callbackMethod As MethodInfo, interfaceType As Type, controlType As Type, displayName As String, id As String, allowsMultipleConnections As Boolean)
參數
- callbackMethod
- MethodInfo
提供者控制項中的方法,傳回介面執行個體至消費者以建立連接。
- displayName
- String
提供者連接點的易記顯示名稱,在連接使用者介面 (UI) 中向使用者顯示。
- id
- String
提供者連接點的唯一識別項。
- allowsMultipleConnections
- Boolean
布林值,指出提供者連接點是否可以同時連接到多個消費者。
例外狀況
callbackMethod
為 null
。
-或-
interfaceType
為 null
。
-或-
controlType
為 null
。
-或-
displayName
為 null
或空字串 ("")。
controlType
與提供者控制項 (或從它衍生的有效類別) 的類型不同。
範例
下列程式代碼範例示範如何衍生自 類別, ProviderConnectionPoint 以建立自定義提供者連接點。
程式代碼範例有三個部分:
包含提供者 WebPart 控制件、取用者 WebPart 控制項和自訂 ProviderConnectionPoint 物件的原始程式檔。
裝載靜態連接中控件的網頁。
如何執行範例程式代碼的說明。
程式代碼範例的第一個部分是提供者和取用者WebPart控件的來源,以及名為TableProviderConnectionPoint
的自定義ProviderConnectionPoint類別。 請注意,類別的 TableProviderConnectionPoint
建構函式會呼叫基底建構函式,並傳遞必要參數,如Parameters區段中所示。 另請注意,在類別中 TableProviderWebPart
,方法 GetConnectionInterface
會指定為連接的回呼方法,而 ConnectionProvider
屬性會將自定義 TableProviderConnectionPoint
宣告為參數。 這示範如何建立自定義提供者連接點,然後將它與提供者控件產生關聯。 此範例假設原始碼是動態編譯的,因此您應該將原始碼檔案放在 Web 應用程式的App_Code子資料夾中。
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Reflection;
using System.Web;
using System.Web.UI;
using System.Security.Permissions;
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 table data.
namespace Samples.AspNet.CS.Controls
{
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public sealed class TableProviderWebPart : WebPart, IWebPartTable
{
DataTable _table;
public TableProviderWebPart()
{
_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);
}
public PropertyDescriptorCollection Schema
{
get
{
return TypeDescriptor.GetProperties(_table.DefaultView[0]);
}
}
public void GetTableData(TableCallback callback)
{
callback(_table.Rows);
}
public bool ConnectionPointEnabled
{
get
{
object o = ViewState["ConnectionPointEnabled"];
return (o != null) ? (bool)o : true;
}
set
{
ViewState["ConnectionPointEnabled"] = value;
}
}
[ConnectionProvider("Table", typeof(TableProviderConnectionPoint), AllowsMultipleConnections = true)]
public IWebPartTable GetConnectionInterface()
{
return new TableProviderWebPart();
}
public class TableProviderConnectionPoint : ProviderConnectionPoint
{
public TableProviderConnectionPoint(MethodInfo callbackMethod, Type interfaceType, Type controlType,
string name, string id, bool allowsMultipleConnections) : base(
callbackMethod, interfaceType, controlType,
name, id, allowsMultipleConnections)
{
}
public override bool GetEnabled(Control control)
{
return ((TableProviderWebPart)control).ConnectionPointEnabled;
}
}
}
// This code sample demonstrates a custom WebPart controls that acts as
// a consumer in a Web Parts connection.
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public class TableConsumer : WebPart
{
private IWebPartTable _provider;
private ICollection _tableData;
private void GetTableData(object tableData)
{
_tableData = (ICollection)tableData;
}
protected override void OnPreRender(EventArgs e)
{
if (_provider != null)
{
_provider.GetTableData(new TableCallback(GetTableData));
}
}
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("Table")]
public void SetConnectionInterface(IWebPartTable provider)
{
_provider = provider;
}
public class TableConsumerConnectionPoint : ConsumerConnectionPoint
{
public TableConsumerConnectionPoint(MethodInfo callbackMethod, Type interfaceType, Type controlType,
string name, string id, bool allowsMultipleConnections)
: base(
callbackMethod, interfaceType, controlType,
name, id, allowsMultipleConnections)
{
}
}
}
}
程式代碼範例的第二個部分是裝載靜態網頁元件連線中自定義控件的網頁。 頁面頂端是一個 Register
指示詞,可宣告自定義控件的前置詞和命名空間。 連接是使用 專案來宣告,而提供者和取用 <asp:webpartconnection>
者控件會在 元素內 <asp:webpartzone>
宣告。
<%@ page language="C#" %>
<%@ register tagprefix="aspSample"
namespace="Samples.AspNet.CS.Controls" %>
<!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>IField Test Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<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>
<aspSample:TableProviderWebPart ID="provider1" runat="server"
ToolTip="Web Parts Table Provider Control" />
<aspSample:TableConsumer ID="consumer1" runat="server"
ToolTip="Web Parts Table Consumer Control"/>
</zoneTemplate>
</asp:webpartzone>
</div>
</form>
</body>
</html>
在瀏覽器中載入頁面。 控件之間的連接已經存在,而取用者會顯示來自提供者的數據,因為連接在頁面中宣告為靜態連接。
備註
類別 ProviderConnectionPoint 的 ProviderConnectionPoint 建構函式只會呼叫基底建構函式,並傳遞至各種參數並初始化基類。
基類建構函式會檢查連接點的參數數目,而且可能會擲回數個例外狀況。 如需可能例外狀況的清單,請參閱例外狀況一節。
您可以呼叫 建 ProviderConnectionPoint 構函式來建立自己的 類別實例 ProviderConnectionPoint 。 不過,如果您只是建立連接而不是擴充 類別,您應該呼叫 GetProviderConnectionPoints 方法,以從提供者傳回現有的連接點物件。