IWebPartField Интерфейс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Определяет интерфейс поставщика для подключения двух серверных элементов управления с помощью одного поля данных.
public interface class IWebPartField
public interface IWebPartField
type IWebPartField = interface
Public Interface IWebPartField
- Производный
Примеры
В следующем примере кода показано, как создать статическое соединение между двумя элементами управления с помощью IWebPartField интерфейса. Пример кода состоит из трех частей:
Исходный код для двух пользовательских WebPart элементов управления, которые могут сформировать соединение с помощью IWebPartField интерфейса, с одним элементом управления, действующим в качестве поставщика, другой выступает в качестве потребителя.
Веб-страница, на которую размещаются элементы управления и объявляет статическое соединение в формате сохраняемости.
Описание того, что происходит при выполнении примера кода.
Первая часть примера кода — исходный код для двух пользовательских элементов управления. Во-первых, это код поставщика, который реализует IWebPartField интерфейс. Для простоты в примере поставщик создает таблицу с некоторыми данными, а не подключение к базе данных. Метод GetConnectionInterface служит точкой подключения поставщика, метод обратного вызова, который возвращает экземпляр интерфейса потребителю. Что касается потребителя, он извлекает экземпляр интерфейса из поставщика в его методе с именем SetConnectionInterface, который помечается атрибутом ConnectionConsumer . После получения экземпляра интерфейса потребитель в своем OnPreRender методе вызывает реализацию GetFieldValue метода в поставщике, чтобы получить фактические данные.
Для запуска примера кода необходимо скомпилировать этот исходный код. Вы можете скомпилировать его явным образом и поместить полученную сборку в папку bin веб-сайта или глобальный кэш сборок. Кроме того, исходный код можно поместить в папку App_Code сайта, где он будет динамически скомпилирован во время выполнения. В этом примере кода используется динамическая компиляция. Пошаговое руководство по компиляции см. в руководстве по разработке и использованию пользовательского веб-сервера.
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
Второй частью примера кода является веб-страница, которая объявляет статическое соединение и размещает элементы управления. В верхней части страницы находится Register директива, которая объявляет пространство имен исходного кода, содержащегося в каталоге App_Code. Соединение объявляется с помощью <asp:webpartconnection> элемента. Пользовательские элементы управления потребителей и поставщиков объявляются в <zonetemplate> элементе в элементе <asp:webpartzone> , который необходим для их подключения (они должны находиться в зоне, наследуемой от WebPartZoneBase класса).
<%@ 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>
Загрузите страницу в браузере. Элемент управления потребителем отображает данные, предоставленные из указанного IWebPartField поля, который поставщик предоставляет через экземпляр интерфейса.
Комментарии
Этот интерфейс предназначен для использования с подключениями веб-частей. В подключении веб-частей два сервера управления, которые находятся в WebPartZoneBase зоне, устанавливают подключение и совместно используют данные, а один элемент управления выступает в качестве потребителя, а другой — поставщиком. Механизм совместного использования данных в подключении веб-частей — это экземпляр интерфейса, который поставщик служит потребителю с помощью метода обратного вызова. Чтобы установить подключение, потребитель и поставщик должны работать с одинаковым типом интерфейса для совместного использования данных. Если потребитель не распознает тип интерфейса, отправленный поставщиком, можно подключить элементы управления с помощью преобразователя ( WebPartTransformer объекта), который преобразует экземпляр интерфейса, отправленный поставщиком, в тип, распознаваемый потребителем. Дополнительные сведения о подключениях см. в разделе WebPartConnection "Общие сведения о подключениях веб-частей".
Интерфейс IWebPartField — это интерфейс поставщика, включенный в набор элементов управления веб-частей в качестве стандартного интерфейса для создания подключений на основе поля данных. Вы также можете создавать пользовательские интерфейсы для использования с подключениями веб-частей, но во многих веб-приложениях, управляемых данными, полезно создавать подключения на основе общей строки (дополнительные сведения, см IWebPartRow . интерфейс), таблицу (дополнительные сведения, см IWebPartTable . интерфейс) или поле из источника данных с помощью IWebPartField интерфейса. В обычном соединении элемент управления, действующий в качестве поставщика, WebPart реализует IWebPartField интерфейс и предоставляет экземпляр интерфейса потребителям в специальном методе обратного вызова. Например, поставщик может реализовать IWebPartField интерфейс для поля в таблице сведений о пользователе, содержащей почтовые данные веб-пользователя. Другой WebPart элемент управления, действующий как потребитель, определяет специальный метод для получения экземпляра интерфейса, а затем может извлекать данные почтового кода, а затем искать и отображать информацию о погоде на основе почтового индекса.
Интерфейс IWebPartField содержит два открытых члена. Свойство Schema возвращает сведения схемы о поле данных, инкапсулированном в объекте PropertyDescriptor . Метод GetFieldValue объявляет метод, который реализует (например, элемент управления поставщиком) для получения данных поля экземпляра интерфейса при вызове метода обратного вызова.
Свойства
| Имя | Описание |
|---|---|
| Schema |
Возвращает сведения о схеме для поля данных, используемого для совместного использования данных между двумя WebPart элементами управления. |
Методы
| Имя | Описание |
|---|---|
| GetFieldValue(FieldCallback) |
Возвращает значение поля, используемого интерфейсом в качестве основы соединения между двумя WebPart элементами управления. |