IWebPartField Interfejs
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Definiuje interfejs dostawcy do łączenia dwóch kontrolek serwera przy użyciu jednego pola danych.
public interface class IWebPartField
public interface IWebPartField
type IWebPartField = interface
Public Interface IWebPartField
- Pochodne
Przykłady
W poniższym przykładzie kodu pokazano, jak utworzyć statyczne połączenie między dwoma kontrolkami przy użyciu interfejsu IWebPartField . Przykładowy kod ma trzy części:
Kod źródłowy dwóch kontrolek niestandardowych WebPart , które mogą utworzyć połączenie przy użyciu interfejsu IWebPartField , z jedną kontrolką działającą jako dostawca, drugą działającą jako odbiorca.
Strona sieci Web, która hostuje kontrolki i deklaruje połączenie statyczne w formacie trwałości.
Opis tego, co się stanie po uruchomieniu przykładowego kodu.
Pierwszą częścią przykładu kodu jest kod źródłowy dla dwóch kontrolek niestandardowych. Najpierw jest kod dostawcy, który implementuje IWebPartField interfejs. Dla uproszczenia w przykładzie dostawca tworzy tabelę z niektórymi danymi zamiast łączyć się z bazą danych. Metoda GetConnectionInterface
służy jako punkt połączenia dostawcy— metoda wywołania zwrotnego, która zwraca wystąpienie interfejsu do odbiorcy. Jeśli chodzi o odbiorcę, pobiera wystąpienie interfejsu z dostawcy w jego metodzie o nazwie SetConnectionInterface
, która jest oznaczona atrybutem ConnectionConsumer
. Po pobraniu wystąpienia interfejsu odbiorca w jego OnPreRender
metodzie wywołuje implementację GetFieldValue metody w dostawcy, aby pobrać rzeczywiste dane.
Aby można było uruchomić przykładowy kod, należy skompilować ten kod źródłowy. Można je skompilować jawnie i umieścić wynikowy zestaw w folderze Bin witryny sieci Web lub globalnej pamięci podręcznej zestawów. Alternatywnie można umieścić kod źródłowy w folderze App_Code witryny, w którym będzie dynamicznie kompilowany w czasie wykonywania. W tym przykładzie kodu jest używana kompilacja dynamiczna. Aby zapoznać się z przewodnikiem, który pokazuje sposób kompilowania, zobacz Przewodnik: tworzenie i używanie niestandardowej kontrolki serwera sieci Web.
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Reflection;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
namespace Samples.AspNet.CS.Controls
{
// This sample code creates a Web Parts control that acts as a provider
// of field data.
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public sealed class FieldProviderWebPart : WebPart, IWebPartField
{
private DataTable _table;
public FieldProviderWebPart()
{
_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("FieldProvider")]
public IWebPartField GetConnectionInterface()
{
return new FieldProviderWebPart();
}
public PropertyDescriptor Schema
{
get
{
/* The two parameters are row and field. Zero is the first record.
0,2 returns the zip code field value. */
return TypeDescriptor.GetProperties(_table.DefaultView[0])[2];
}
}
void IWebPartField.GetFieldValue(FieldCallback callback)
{
callback(Schema.GetValue(_table.DefaultView[0]));
}
} // end FieldProviderWebPart
// This sample code creates a Web Parts control that acts as a consumer
// of an IWebPartField interface.
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public class FieldConsumerWebPart : WebPart
{
private IWebPartField _provider;
private object _fieldValue;
private void GetFieldValue(object fieldValue)
{
_fieldValue = fieldValue;
}
public bool ConnectionPointEnabled
{
get
{
object o = ViewState["ConnectionPointEnabled"];
return (o != null) ? (bool)o : true;
}
set
{
ViewState["ConnectionPointEnabled"] = value;
}
}
protected override void OnPreRender(EventArgs e)
{
if (_provider != null)
{
_provider.GetFieldValue(new FieldCallback(GetFieldValue));
}
base.OnPreRender(e);
}
protected override void RenderContents(HtmlTextWriter writer)
{
if (_provider != null)
{
PropertyDescriptor prop = _provider.Schema;
if (prop != null && _fieldValue != null)
{
writer.Write(prop.DisplayName + ": " + _fieldValue);
}
else
{
writer.Write("No data");
}
}
else
{
writer.Write("Not connected");
}
}
[ConnectionConsumer("FieldConsumer", "Connpoint1",
typeof(FieldConsumerConnectionPoint), AllowsMultipleConnections = true)]
public void SetConnectionInterface(IWebPartField provider)
{
_provider = provider;
}
public class FieldConsumerConnectionPoint : ConsumerConnectionPoint
{
public FieldConsumerConnectionPoint(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 ((FieldConsumerWebPart)control).ConnectionPointEnabled;
}
} // end FieldConsumerConnectionPoint
} // end FieldConsumerWebPart
} // end namespace Samples.AspNet.CS.Controls
Imports System.Collections
Imports System.ComponentModel
Imports System.Data
Imports System.Reflection
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Namespace Samples.AspNet.VB.Controls
' This sample code creates a Web Parts control that acts as a
' provider of field data.
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public NotInheritable Class FieldProviderWebPart
Inherits WebPart
Implements IWebPartField
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("FieldProvider")> _
Public Function GetConnectionInterface() As IWebPartField
Return New FieldProviderWebPart()
End Function
Public ReadOnly Property Schema() As ComponentModel.PropertyDescriptor _
Implements IWebPartField.Schema
Get
' The two parameters are row and field. Zero is the first record.
' 0,2 returns the zip code field value.
Return TypeDescriptor.GetProperties(_table.DefaultView(0))(2)
End Get
End Property
Sub GetFieldValue(ByVal callback As FieldCallback) _
Implements IWebPartField.GetFieldValue
callback(Schema.GetValue(_table.DefaultView(0)))
End Sub
End Class
' This sample code creates a Web Parts control that acts as a
' consumer of an IWebPartField interface.
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Class FieldConsumerWebPart
Inherits WebPart
Private _provider As IWebPartField
Private _fieldValue As Object
Private Sub GetFieldValue(ByVal fieldValue As Object)
_fieldValue = fieldValue
End Sub
Public Property ConnectionPointEnabled() As Boolean
Get
Dim o As Object = ViewState("ConnectionPointEnabled")
Return IIf(Not (o Is Nothing), CBool(o), True)
End Get
Set(ByVal value As Boolean)
ViewState("ConnectionPointEnabled") = value
End Set
End Property
Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
If Not (_provider Is Nothing) Then
_provider.GetFieldValue(New FieldCallback(AddressOf GetFieldValue))
End If
MyBase.OnPreRender(e)
End Sub
Protected Overrides Sub RenderContents(ByVal writer As _
HtmlTextWriter)
If Not (_provider Is Nothing) Then
Dim prop As PropertyDescriptor = _provider.Schema
If Not (prop Is Nothing) AndAlso Not (_fieldValue Is Nothing) Then
writer.Write(prop.DisplayName & ": " & _fieldValue)
Else
writer.Write("No data")
End If
Else
writer.Write("Not connected")
End If
End Sub
<ConnectionConsumer("FieldConsumer", "Connpoint1", _
GetType(FieldConsumerConnectionPoint), AllowsMultipleConnections:=True)> _
Public Sub SetConnectionInterface(ByVal provider As IWebPartField)
_provider = provider
End Sub
End Class
Public Class FieldConsumerConnectionPoint
Inherits ConsumerConnectionPoint
Public Sub New(ByVal callbackMethod As MethodInfo, _
ByVal interfaceType As Type, ByVal controlType As Type, _
ByVal name As String, ByVal id As String, _
ByVal allowsMultipleConnections As Boolean)
MyBase.New(callbackMethod, interfaceType, controlType, _
name, id, allowsMultipleConnections)
End Sub
Public Overrides Function GetEnabled(ByVal control As Control) _
As Boolean
Return CType(control, FieldConsumerWebPart).ConnectionPointEnabled
End Function
End Class
End Namespace ' Samples.AspNet.VB.Controls
Drugą częścią przykładu kodu jest strona internetowa, która deklaruje połączenie statyczne i hostuje kontrolki. W górnej części strony znajduje Register
się dyrektywa, która deklaruje przestrzeń nazw kodu źródłowego zawartego w katalogu App_Code. Połączenie jest deklarowane przy użyciu <asp:webpartconnection>
elementu . Kontrolki niestandardowego konsumenta i dostawcy są deklarowane w elememencie <zonetemplate>
w elememencie <asp:webpartzone>
, który jest wymagany, aby mógł nawiązać połączenie (muszą znajdować się w strefie dziedziczonej WebPartZoneBase po klasie).
<%@ page language="C#" %>
<%@ Register tagprefix="IField"
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">
<!-- This code sample creates a page with two Web Parts controls
and establishes a connection between the controls. -->
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>IWebPartField Test Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:webpartmanager id="WebPartManager1" runat="server">
<StaticConnections>
<asp:WebPartConnection id="con1" ProviderID="provider1"
ConsumerID="consumer1"
ConsumerConnectionPointID="Connpoint1">
</asp:WebPartConnection>
</StaticConnections>
</asp:webpartmanager>
<asp:webpartzone id="WebPartZone1" runat="server">
<zoneTemplate>
<ifield:fieldproviderwebpart runat="Server"
ID="provider1" Title="Provider" />
<ifield:fieldconsumerwebpart runat="Server"
ID="consumer1" Title="Consumer"/>
</zoneTemplate>
</asp:webpartzone>
</div>
</form>
</body>
</html>
<%@ page language="VB" debug="true" %>
<%@ Register tagprefix="IField"
Namespace="Samples.AspNet.VB.Controls" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- This code sample creates a page with two Web Parts controls
and establishes a connection between the controls. -->
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>IWebPartField Test Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:webpartmanager id="WebPartManager1" runat="server">
<StaticConnections>
<asp:WebPartConnection id="con1" ProviderID="provider1"
ConsumerID="consumer1"
ConsumerConnectionPointID="Connpoint1">
</asp:WebPartConnection>
</StaticConnections>
</asp:webpartmanager>
<asp:webpartzone id="WebPartZone1" runat="server">
<zoneTemplate>
<ifield:fieldproviderwebpart runat="Server"
ID="provider1" Title="Provider" />
<ifield:fieldconsumerwebpart runat="Server"
ID="consumer1" Title="Consumer"/>
</zoneTemplate>
</asp:webpartzone>
</div>
</form>
</body>
</html>
Załaduj stronę w przeglądarce. Kontrolka konsumenta wyświetla dane dostarczone z określonego pola, które dostawca udostępnia za pośrednictwem wystąpienia interfejsu IWebPartField .
Uwagi
Ten interfejs jest przeznaczony do użycia z połączeniami składników Web Part. W połączeniu składników Web Part dwa kontrolki serwera znajdujące się w WebPartZoneBase strefie ustanawiają połączenie i udostępniają dane, z jedną kontrolką działającą jako odbiorca, a drugą kontrolką działającą jako dostawca. Mechanizm udostępniania danych w połączeniu składników Web Part jest wystąpieniem interfejsu, które dostawca służy użytkownikowi za pomocą metody wywołania zwrotnego. Aby nawiązać połączenie, konsument i dostawca muszą pracować z tym samym typem interfejsu w celu udostępniania danych. Jeśli konsument nie rozpoznaje typu interfejsu wysyłanego przez dostawcę, nadal można połączyć kontrolki za pomocą transformatora WebPartTransformer (obiektu), który tłumaczy wystąpienie interfejsu wysyłane przez dostawcę na typ rozpoznawany przez użytkownika. Aby uzyskać szczegółowe informacje na temat połączeń, zobacz WebPartConnection i Web Part Connections Overview (Omówienie połączeń składników Web Part).
Interfejs IWebPartField jest interfejsem dostawcy dołączonym do kontrolki składników Web Part ustawionym jako standardowy interfejs do tworzenia połączeń na podstawie pola danych. Można również tworzyć interfejsy niestandardowe do użycia z połączeniami składników Web Part, ale w wielu aplikacjach sieci Web opartych na danych warto tworzyć połączenia na podstawie wspólnego wiersza (aby uzyskać szczegółowe informacje, zobacz IWebPartRow interfejs), tabelę (aby uzyskać szczegółowe informacje, zobacz IWebPartTable interfejs) lub pole ze źródła danych przy użyciu interfejsu IWebPartField . W typowym połączeniu kontrolka WebPart działająca jako dostawca implementuje IWebPartField interfejs i udostępnia wystąpienie interfejsu użytkownikom w specjalnej metodzie wywołania zwrotnego. Na przykład dostawca może zaimplementować IWebPartField interfejs dla pola w tabeli informacji o użytkowniku, który zawiera dane kodu pocztowego użytkownika sieci Web. Inna WebPart kontrolka działająca jako użytkownik definiuje specjalną metodę odbierania wystąpienia interfejsu, a następnie może wyodrębnić dane kodu pocztowego, a następnie wyszukać i wyświetlić informacje o pogodzie na podstawie kodu pocztowego.
Interfejs IWebPartField ma dwa uwidocznione elementy członkowskie. Właściwość Schema zwraca informacje o schemacie dotyczące pola danych hermetyzowanego PropertyDescriptor w obiekcie. Metoda GetFieldValue deklaruje metodę, która implementator (na przykład kontrolka dostawcy) używa do pobierania danych pola wystąpienia interfejsu po wywołaniu metody wywołania zwrotnego.
Właściwości
Schema |
Pobiera informacje o schemacie dla pola danych używanego do udostępniania danych między dwiema WebPart kontrolkami. |
Metody
GetFieldValue(FieldCallback) |
Zwraca wartość pola używanego przez interfejs jako podstawę połączenia między dwoma WebPart kontrolkami. |