IWebPartRow 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 IWebPartRow
public interface IWebPartRow
type IWebPartRow = interface
Public Interface IWebPartRow
Przykłady
W poniższym przykładzie kodu pokazano, jak utworzyć połączenie statyczne między dwoma kontrolkami przy użyciu interfejsu IWebPartRow . 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 IWebPartRow , z jedną kontrolką działającą jako dostawca, a 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 to kod dostawcy, który implementuje IWebPartRow interfejs. Dla uproszczenia w tym 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 konsumenta, pobiera wystąpienie interfejsu z dostawcy w swojej metodzie o nazwie SetConnectionInterface
, która jest oznaczona atrybutem ConnectionConsumer
. Po pobraniu wystąpienia interfejsu odbiorca w swojej OnPreRender
metodzie wywołuje implementację GetRowData metody w dostawcy, aby pobrać rzeczywiste dane i zapisać je na stronie.
Aby przykład kodu został uruchomiony, należy skompilować ten kod źródłowy. Można je jawnie skompilować i umieścić wynikowy zestaw w folderze Bin witryny sieci Web lub globalnej pamięci podręcznej zestawów. Możesz też 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, jak skompilować, zobacz Przewodnik: opracowywanie 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 row data.
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
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);
}
} // RowProviderWebPart
// This sample code creates a Web Parts control that acts as a consumer
// of row data.
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
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;
}
} // RowConsumerWebPart
} // 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 row data.
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
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 _
ComponentModel.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
' This sample code creates a Web Parts control that acts as a consumer
' of row data.
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
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(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
End Namespace ' Samples.AspNet.VB.Controls
Drugą częścią przykładu kodu jest strona sieci Web, 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 <zonetemplate>
konsumenta i dostawcy są deklarowane w elemecie w <asp:webpartzone>
elemecie, który jest wymagany do nawiązania połączenia (muszą znajdować się w strefie dziedziczonej WebPartZoneBase z klasy).
<%@ page language="C#" %>
<%@ Register tagprefix="IRow"
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>IRow 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>
<irow:RowProviderWebPart ID="provider1" runat="server"
Title="Row Provider Control" />
<irow:RowConsumerWebPart ID="consumer1" runat="server"
Title="Row Consumer Control" />
</ZoneTemplate>
</asp:webpartzone>
</div>
</form>
</body>
</html>
<%@ page language="VB" %>
<%@ Register tagprefix="IRow"
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">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>IRow 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>
<irow:RowProviderWebPart ID="provider1" runat="server"
Title="Row Provider Control" />
<irow:RowConsumerWebPart ID="consumer1" runat="server"
Title="Row Consumer Control" />
</ZoneTemplate>
</asp:webpartzone>
</div>
</form>
</body>
</html>
Załaduj stronę w przeglądarce. Kontrolka konsumenta wyświetla dane podane z określonego wiersza, które dostawca udostępnia za pośrednictwem wystąpienia interfejsu IWebPartRow .
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 i 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, użytkownik i dostawca muszą pracować z tym samym typem interfejsu w celu udostępniania danych. Jeśli użytkownik 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 konsumenta. Aby uzyskać szczegółowe informacje na temat połączeń, zobacz WebPartConnectionOmówienie połączeń składników Web Part.
Interfejs IWebPartRow jest interfejsem dostawcy dołączonym do kontrolki składników Web Part ustawionym jako standardowy interfejs do tworzenia połączeń na podstawie wiersza danych. Można również tworzyć interfejsy niestandardowe do użycia z połączeniami składników Web Part, ale w wielu aplikacjach internetowych opartych na danych warto tworzyć połączenia na podstawie wspólnego pola (aby uzyskać szczegółowe informacje, zobacz interfejs), tabelę (aby uzyskać szczegółowe informacje, zobacz IWebPartFieldIWebPartTable interfejs) lub wiersz ze źródła danych. W typowym połączeniu WebPart kontrolka działająca jako dostawca implementuje IWebPartRow interfejs i udostępnia wystąpienie interfejsu użytkownikom w specjalnej metodzie wywołania zwrotnego. Na przykład dostawca może zaimplementować IWebPartRow interfejs dla wiersza odpowiadającego użytkownikowi w tabeli informacji o użytkowniku. Inna WebPart kontrolka działająca jako użytkownik definiuje specjalną metodę odbierania wystąpienia interfejsu, a następnie może wyodrębnić dane użytkownika, użyć jej do wyszukania dodatkowych informacji o kontach tego użytkownika i wyświetlić wszystkie informacje związane z tym użytkownikiem na stronie.
Interfejs IWebPartRow ma dwa uwidocznione elementy członkowskie. Właściwość Schema zwraca informacje o schemacie dotyczące wiersza danych hermetyzowanego PropertyDescriptorCollection w obiekcie. Metoda GetRowData deklaruje metodę, która implementator (np. kontrolka dostawcy) używa do pobierania danych wiersza wystąpienia interfejsu po wywołaniu metody wywołania zwrotnego.
Właściwości
Schema |
Pobiera informacje o schemacie dla wiersza danych używanego do udostępniania danych między dwiema WebPart kontrolkami. |
Metody
GetRowData(RowCallback) |
Zwraca dane dla wiersza używanego przez interfejs jako podstawę połączenia między dwoma WebPart kontrolkami. |