IWebPartRow Interface

Définition

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 comme fournisseur, et l’autre agissant comme 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 . Pour plus de simplicité dans l’exemple, le fournisseur crée une table avec certaines 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 l’é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 cache d’assembly global. 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 de 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. Près du haut de la page est 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 élément au sein d’un <zonetemplate> <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 met à disposition via une instance de l’interface IWebPartRow .

Remarques

Cette interface est conçue pour être utilisée avec des connexions composants WebPart. Dans une connexion composants WebPart, deux contrôles serveur qui résident dans une WebPartZoneBase zone établissent une connexion et partagent des données, avec un contrôle agissant en tant que consommateur et l’autre contrôle agissant en tant que fournisseur. Le mécanisme de partage de données dans une connexion 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 les 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 à l’aide 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 WebPartConnection et composants WebPart Vue d’ensemble des connexions.

L’interface IWebPartRow est une interface fournisseur incluse dans le jeu de contrôles composants WebPart comme interface standard pour créer des connexions basées sur une ligne de données. Vous pouvez également créer des interfaces personnalisées à utiliser avec des connexions composants 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’interfaceIWebPartField), table (pour plus d’informations, voir l’interfaceIWebPartTable) ou 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, l’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 comporte 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 de 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.

S’applique à

Voir aussi