IWebPartRow Interface
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Définit une interface de fournisseur pour connecter deux contrôles serveur à l'aide d'un seul champ de données.
public interface class IWebPartRow
public interface IWebPartRow
type IWebPartRow = interface
Public Interface IWebPartRow
Exemples
L’exemple de code suivant montre comment créer une connexion statique entre deux contrôles à l’aide de l’interface IWebPartRow . L’exemple de code comporte trois parties :
Code source pour deux contrôles personnalisés WebPart qui peuvent former une connexion à l’aide de l’interface IWebPartRow , avec un contrôle agissant en tant que fournisseur et l’autre en tant que consommateur.
Page Web qui héberge les contrôles et déclare la connexion statique au format de persistance.
Description de ce qui se passe lorsque l’exemple de code s’exécute.
La première partie de l’exemple de code est le code source des deux contrôles personnalisés. Tout d’abord, le code du fournisseur, qui implémente l’interface IWebPartRow . Par souci de simplicité dans l’exemple, le fournisseur crée une table avec des données plutôt que de se connecter à une base de données. La GetConnectionInterface
méthode sert de point de connexion du fournisseur, la méthode de rappel qui retourne l’instance d’interface au consommateur. Quant au consommateur, il récupère l’instance d’interface du fournisseur dans sa méthode nommée SetConnectionInterface
, qui est marquée avec un ConnectionConsumer
attribut . Après avoir récupéré l’instance de l’interface, le consommateur, dans sa OnPreRender
méthode, appelle l’implémentation de la GetRowData méthode dans le fournisseur, pour récupérer les données réelles et les écrire dans la page.
Pour que l’exemple de code s’exécute, vous devez compiler ce code source. Vous pouvez le compiler explicitement et placer l’assembly résultant dans le dossier Bin de votre site web ou dans le Global Assembly Cache. Vous pouvez également placer le code source dans le dossier App_Code de votre site, où il sera compilé dynamiquement au moment de l’exécution. Cet exemple de code utilise la compilation dynamique. Pour obtenir une procédure pas à pas qui montre comment compiler, consultez Procédure pas à pas : développement et utilisation d’un contrôle serveur Web personnalisé.
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
La deuxième partie de l’exemple de code est la page Web qui déclare la connexion statique et héberge les contrôles. En haut de la page se trouve une Register
directive qui déclare l’espace de noms du code source contenu dans le répertoire App_Code. La connexion est déclarée à l’aide d’un <asp:webpartconnection>
élément . Les contrôles de consommateur et de fournisseur personnalisés sont déclarés dans un <zonetemplate>
élément au sein d’un <asp:webpartzone>
élément, ce qui est nécessaire pour qu’ils puissent se connecter (ils doivent résider dans une zone qui hérite de la WebPartZoneBase classe ).
<%@ 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>
Chargez la page dans un navigateur. Le contrôle consommateur affiche les données fournies à partir de la ligne spécifiée, que le fournisseur rend disponibles via une instance de l’interface IWebPartRow .
Remarques
Cette interface est conçue pour être utilisée avec les connexions de composants WebPart. Dans une connexion de composants WebPart, deux contrôles serveur qui résident dans une WebPartZoneBase zone établissent une connexion et partagent des données, un contrôle agissant en tant que consommateur et l’autre en tant que fournisseur. Le mécanisme de partage de données dans une connexion de composants WebPart est une instance d’interface, que le fournisseur sert au consommateur au moyen d’une méthode de rappel. Pour établir une connexion, le consommateur et le fournisseur doivent tous deux utiliser le même type d’interface pour le partage de données. Si le consommateur ne reconnaît pas le type d’interface envoyé par le fournisseur, il est toujours possible de connecter les contrôles au moyen d’un transformateur (objet WebPartTransformer ) qui traduit l’instance d’interface envoyée par le fournisseur en un type que le consommateur reconnaît. Pour plus d’informations sur les connexions, consultez WebPartConnectionet Vue d’ensemble des connexions webPart.
L’interface IWebPartRow est une interface de fournisseur incluse dans le jeu de contrôles WebPart en tant qu’interface standard pour la création de connexions basées sur une ligne de données. Vous pouvez également créer des interfaces personnalisées à utiliser avec des connexions WebPart, mais dans de nombreuses applications web pilotées par les données, il est utile de créer des connexions basées sur un champ commun (pour plus d’informations, voir l’interface IWebPartField ), une table (pour plus d’informations, voir l’interface IWebPartTable ) ou une ligne à partir de la source de données. Dans une connexion classique, un WebPart contrôle agissant en tant que fournisseur implémente l’interface IWebPartRow et fournit une instance de l’interface aux consommateurs dans une méthode de rappel spéciale. Par exemple, le fournisseur peut implémenter une IWebPartRow interface pour une ligne qui correspond à un utilisateur dans votre table d’informations utilisateur. Un autre WebPart contrôle agissant en tant que consommateur définirait une méthode spéciale pour recevoir l’instance d’interface, et pourrait ensuite extraire les données utilisateur, les utiliser pour rechercher des informations supplémentaires sur les comptes de cet utilisateur et afficher toutes les informations relatives à cet utilisateur sur la page.
L’interface IWebPartRow a deux membres exposés. La Schema propriété retourne des informations de schéma sur la ligne de données encapsulée dans un PropertyDescriptorCollection objet . La GetRowData méthode déclare une méthode qu’un implémenteur (tel qu’un contrôle fournisseur) utilise pour récupérer les données de ligne de l’instance d’interface lorsque la méthode de rappel est appelée.
Propriétés
Schema |
Reçoit les informations de schéma pour une ligne de données utilisée pour partager des données entre deux contrôles WebPart. |
Méthodes
GetRowData(RowCallback) |
Retourne les données de la ligne utilisée par l'interface comme base d'une connexion entre deux contrôles WebPart. |