WebPartTransformer 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供變壓器類別在兩個不相容連接點間轉換資料的基本實作。
public ref class WebPartTransformer abstract
public abstract class WebPartTransformer
type WebPartTransformer = class
Public MustInherit Class WebPartTransformer
- 繼承
-
WebPartTransformer
- 衍生
範例
以下程式碼範例示範如何建立由 WebPartTransformer 類別衍生的客製化變換器。 該變壓器稱為 RowToStringTransformer,允許連接網路零件提供者與不相容連接點的網路零件消費者。 提供者呈現的資料類型為 IWebPartRow,但消費者只接受類型 String為 的資料。 該 RowToStringTransformer 類別執行必要的轉換。
程式碼範例未包含提供者或消費者的實作。 你必須建立一個實作介面 IWebPartRow 的提供者,以及一個期望透過該範例命名 IString 的客製化介面獲得資料運作的消費者。
// An interface that the transformer provides to the consumer.
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public interface IString
{
void GetStringValue(StringCallback callback);
}
' An interface that the transformer provides to the consumer.
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Interface IString
Sub GetStringValue(ByVal callback As StringCallback)
End Interface
程式碼範例的第一部分包含提供者與消費者 Web Parts 控制的程式碼,以及 transformer 的程式碼。
// A transformer that transforms a row to a string.
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
[WebPartTransformer(typeof(IWebPartRow), typeof(IString))]
public class RowToStringTransformer : WebPartTransformer, IString
{
private IWebPartRow _provider;
private StringCallback _callback;
private void GetRowData(object rowData)
{
PropertyDescriptorCollection props = _provider.Schema;
if (props != null && props.Count > 0 && rowData != null)
{
string returnValue = String.Empty;
foreach (PropertyDescriptor prop in props)
{
if (prop != props[0])
{
returnValue += ", ";
}
returnValue += prop.DisplayName + ": " + prop.GetValue(rowData);
}
_callback(returnValue);
}
else
{
_callback(null);
}
}
public override object Transform(object providerData)
{
_provider = (IWebPartRow)providerData;
return this;
}
void IString.GetStringValue(StringCallback callback)
{
if (callback == null)
{
throw new ArgumentNullException("callback");
}
if (_provider != null)
{
_callback = callback;
_provider.GetRowData(new RowCallback(GetRowData));
}
else
{
callback(null);
}
}
}
' A transformer that transforms a row to a string.
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<WebPartTransformer(GetType(IWebPartRow), GetType(IString))> _
Public Class RowToStringTransformer
Inherits WebPartTransformer
Implements IString
Private _provider As IWebPartRow
Private _callback As StringCallback
Private Sub GetRowData(ByVal rowData As Object)
Dim props As PropertyDescriptorCollection = _provider.Schema
If ((Not (props Is Nothing)) AndAlso (props.Count > 0) _
AndAlso (Not (rowData Is Nothing))) Then
Dim returnValue As String = String.Empty
For Each prop As PropertyDescriptor In props
If Not (prop Is props(0)) Then
returnValue += ", "
End If
returnValue += prop.DisplayName.ToString() + ": " + _
prop.GetValue(rowData).ToString()
Next
_callback(returnValue)
Else
_callback(Nothing)
End If
End Sub
Public Overrides Function Transform(ByVal providerData As Object) As Object
_provider = CType(providerData, IWebPartRow)
Return Me
End Function
Sub GetStringValue(ByVal callback As StringCallback) _
Implements IString.GetStringValue
If (callback Is Nothing) Then
Throw New ArgumentNullException("callback")
End If
If (Not (_provider Is Nothing)) Then
_callback = callback
_provider.GetRowData(New RowCallback(AddressOf GetRowData))
Else
callback(Nothing)
End If
End Sub
End Class
程式碼範例的第二部分展示了如何在物件的宣告語法 WebPartConnection 中包含變換器。
<%@ Page language="c#" trace="false" debug="true" %>
<%@ register tagprefix="uc1"
tagname="DisplayModeMenuCS"
src="~/displaymodemenucs.ascx" %>
<%@ Register TagPrefix="wp"
NameSpace="Samples.AspNet.CS.Controls" %>
<script runat="server">
</script>
<!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>
<title>Web Parts Transformer Sample Page</title>
</head>
<body>
<form id="Form1" runat="server">
<asp:webpartmanager id="manager" runat="server">
<staticconnections>
<asp:webpartconnection id="conn1" providerid="p1" consumerid="c1">
<wp:rowtostringtransformer />
</asp:webpartconnection>
</staticconnections>
</asp:webpartmanager>
<uc1:displaymodemenucs id="menu1" runat="server" />
<table>
<tr valign="top">
<td>
<asp:webpartzone id="zone1" headertext="zone1" runat="server">
<zonetemplate>
<wp:rowproviderwebpart id="p1" runat="server" />
<wp:stringconsumerwebpart id="c1" runat="server" />
</zonetemplate>
</asp:webpartzone>
</td>
<td>
<asp:connectionszone id="connectionszone1" runat="server" />
</td>
</tr>
</table>
</form>
</body>
</html>
<%@ Page Language="VB" %>
<%@ register tagprefix="uc1"
tagname="DisplayModeMenuVB"
src="~/displaymodemenuvb.ascx" %>
<%@ Register TagPrefix="wp"
NameSpace="Samples.AspNet.VB.Controls" %>
<script runat="server">
</script>
<!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>
<title>Web Parts Transformers Sample Page</title>
</head>
<body>
<form id="Form1" runat="server">
<asp:webpartmanager id="manager" runat="server">
<staticconnections>
<asp:webpartconnection id="conn1" providerid="p1" consumerid="c1">
<wp:rowtostringtransformer />
</asp:webpartconnection>
</staticconnections>
</asp:webpartmanager>
<uc1:displaymodemenuvb id="menu1" runat="server" />
<table>
<tr valign="top">
<td>
<asp:webpartzone id="zone1" headertext="zone1" runat="server">
<zonetemplate>
<wp:rowproviderwebpart id="p1" runat="server" />
<wp:stringconsumerwebpart id="c1" runat="server" />
</zonetemplate>
</asp:webpartzone>
</td>
<td>
<asp:connectionszone id="connectionszone1" runat="server" />
</td>
</tr>
</table>
</form>
</body>
</html>
必須在 <transformers> Web.config 檔案的區塊中指定一個客製化的變壓器,才能在網頁中使用。 範例的第三部分展示了如何將自訂的變換器加入 Web.config 檔案。
<webParts enableExport="true">
<transformers>
<add name="RowToStringTransformer"
type="Samples.AspNet.VB.Controls.RowToStringTransformer" />
</transformers>
</webParts>
<webParts enableExport="true">
<transformers>
<add name="RowToStringTransformer"
type="Samples.AspNet.CS.Controls.RowToStringTransformer" />
</transformers>
</webParts>
程式碼範例包含一個使用者控制功能,讓你能在網頁部分頁面上更改顯示模式。 使用者控制的原始碼來自另一個主題。 你可以從 《Walkthrough: Changing Display Modes on a Web Parts Page》取得使用者控制的 .ascx 檔案,且必須與.aspx頁同資料夾中。
備註
轉換器用於在兩個不相容連接點的 Web Parts 控制項間轉換資料。 當連接點透過不同介面提供或消耗資料時,它們就不相容。 例如,一個實作提供者連接點為 的 IWebPartRow 提供者,無法直接連接到預期提供者連接點為 IWebPartTable的消費者。 取而代之的是,必須使用變壓器來連接兩個 Web Parts 控制項。
變壓器接受提供者連接點所支援的資料類型。 它會進行必要的內部處理,將資料轉換成消費者連接點所支援的類型。
變壓器可以提供使用者介面(UI),讓使用者在連接模式下能夠設定變壓器。 設定控制可透過此 CreateConfigurationControl 方法取得,並顯示在 Web Parts 連接區。
WebPartTransformer 是一個抽象類別,必須擴充以提供不同類型連接點間的客製化平移。
給實施者的注意事項
你必須覆蓋這個 Transform(Object) 方法。
建構函式
| 名稱 | Description |
|---|---|
| WebPartTransformer() |
初始化 WebPartTransformer 類別的新執行個體。 |
方法
| 名稱 | Description |
|---|---|
| CreateConfigurationControl() |
顯示一個 ASP.NET 控制,可在ConnectionsZone區域配置變壓器。 |
| Equals(Object) |
判斷指定的物件是否等於目前的物件。 (繼承來源 Object) |
| GetHashCode() |
做為預設哈希函式。 (繼承來源 Object) |
| GetType() |
取得目前實例的 Type。 (繼承來源 Object) |
| LoadConfigurationState(Object) |
載入方法 SaveConfigurationState() 儲存的設定狀態。 |
| MemberwiseClone() |
建立目前 Object的淺層複本。 (繼承來源 Object) |
| SaveConfigurationState() |
儲存使用者在 ASP.NET 設定控制中設定的設定狀態。 |
| ToString() |
傳回表示目前 物件的字串。 (繼承來源 Object) |
| Transform(Object) |
實作後,提供一個用於資料轉換的物件。 |