Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez aussi afficher la version anglaise dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte.
Traduction
Anglais
Cette documentation est archivée et n’est pas conservée.

IWebPartField, interface

Définit une interface de fournisseur pour connecter deux contrôles serveur à l'aide d'un seul champ de données.

Espace de noms :  System.Web.UI.WebControls.WebParts
Assembly :  System.Web (dans System.Web.dll)

public interface IWebPartField

Le type IWebPartField expose les membres suivants.

  NomDescription
Propriété publiqueSchemaReçoit les informations de schéma pour un champ de données utilisé pour partager des données entre deux contrôles WebPart.
Début

  NomDescription
Méthode publiqueGetFieldValueRetourne la valeur du champ utilisé par l'interface comme base d'une connexion entre deux contrôles WebPart.
Début

Cette interface est conçue pour être utilisée avec les connexions WebPart. Dans une connexion WebPart, deux contrôles serveur qui résident dans une zone WebPartZoneBase établissent une connexion et partagent des données à l'aide d'un contrôle agissant comme consommateur et d'un autre contrôle agissant comme fournisseur. Le mécanisme de partage des données dans une connexion 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 partager des données. Si le consommateur ne reconnaît pas le type d'interface envoyé par le fournisseur, il reste possible de connecter les contrôles au moyen d'un transformateur (objet WebPartTransformer) qui traduit l'instance d'interface envoyée par le fournisseur dans un type que le consommateur reconnaît. Pour plus d'informations sur les connexions, consultez WebPartConnection et Vue d'ensemble des connexions WebPart.

L'interface IWebPartField est une interface de fournisseur incluse avec le contrôle WebPart et définie comme interface standard pour créer des connexions en fonction d'un champ de données. Vous pouvez également créer des interfaces personnalisées à utiliser avec les connexions WebPart, mais dans de nombreuses applications Web pilotées par données, il est utile de créer des connexions basées sur une ligne (pour plus d'informations, consultez l'interface IWebPartRow), une table (pour plus d'informations, consultez l'interface IWebPartTable) ou un champ de la source de données communs., à l'aide de l'interface IWebPartField. Dans une connexion type, un contrôle WebPart agissant comme fournisseur implémenterait l'interface IWebPartField et fournirait une instance de l'interface aux consommateurs dans une méthode de rappel spéciale. Par exemple, le fournisseur peut implémenter une interface IWebPartField pour un champ dans votre table d'informations utilisateur qui contient les données de code postal d'un utilisateur Web. Un autre contrôle WebPart agissant comme un consommateur définirait une méthode spéciale pour recevoir l'instance d'interface et pourrait extraire ensuite les données de code postal et rechercher et afficher la météo en fonction du code postal.

L'interface IWebPartField contient deux membres exposés. La propriété Schema retourne des informations de schéma relatives au champ de données encapsulées dans un objet PropertyDescriptor. La méthode GetFieldValue déclare une méthode qu'un implémenteur (tel qu'un contrôle fournisseur) utilise pour récupérer les données de champ de l'instance d'interface lorsque la méthode de rappel est appelée.

L'exemple de code suivant illustre comment créer une connexion statique entre deux contrôles à l'aide de l'interface IWebPartField. L'exemple de code se compose de trois parties :

  • Le code source pour deux contrôles WebPart personnalisés qui peuvent établir une connexion à l'aide de l'interface IWebPartField, avec un contrôle agissant comme fournisseur et l'autre comme consommateur.

  • Page Web qui héberge les contrôles et déclare la connexion statique dans le format de persistance.

  • Description de l'événement qui se produit lors de l'exécution de l'exemple de code.

La première partie de l'exemple de code constitue le code source des deux contrôles personnalisés. Tout d'abord, le code est destiné au fournisseur qui implémente l'interface IWebPartField. Pour simplifier l'exemple, le fournisseur peut créer une table avec quelques données plutôt que d'établir une connexion à une base de données. La méthode GetConnectionInterface sert de point de connexion du fournisseur, la méthode de rappel qui retourne l'instance d'interface au consommateur. Comme pour le consommateur, elle récupère l'instance d'interface du fournisseur dans sa méthode nommée SetConnectionInterface, qui est marquée avec un attribut ConnectionConsumer. Après avoir récupéré l'instance de l'interface, le consommateur, dans sa méthode OnPreRender, appelle l'implémentation de la méthode GetFieldValue dans le fournisseur, pour récupérer les données réelles.

Pour exécuter l'exemple de code, vous devez compiler ce code source. Vous pouvez le compiler explicitement et mettre l'assembly résultant dans le dossier Bin de votre site Web ou dans le Global Assembly Cache. Vous pouvez également mettre 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 illustre le processus de compilation, 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 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


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. Vers le haut de la page se trouve une directive Register 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 élément <asp:webpartconnection>. Les contrôles consommateur et fournisseur personnalisés sont déclarés dans un élément <zonetemplate> dans un élément <asp:webpartzone>, qui est nécessaire à leur connexion (ils doivent résider dans une zone qui hérite de la classe 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>


Chargez la page dans un navigateur. Le contrôle consommateur affiche les données fournies dans le champ spécifié que le fournisseur rend disponible via une instance de l'interface IWebPartField.

.NET Framework

Pris en charge dans : 4, 3.5, 3.0, 2.0

Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
Afficher: