Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source
Ce sujet n'a pas encore été évalué - Évaluez ce sujet

Binding, classe

Représente la liaison simple entre la valeur de propriété d'un objet et la valeur de propriété du contrôle.

System.Object
  System.Windows.Forms.Binding

Espace de noms :  System.Windows.Forms
Assembly :  System.Windows.Forms (dans System.Windows.Forms.dll)
[TypeConverterAttribute(typeof(ListBindingConverter))]
public class Binding

Le type Binding expose les membres suivants.

  NomDescription
Méthode publiqueBinding(String, Object, String)Initialise une nouvelle instance de la classe Binding qui établit une liaison simple de la propriété du contrôle indiquée aux données membres spécifiées de la source de données.
Méthode publiqueBinding(String, Object, String, Boolean)Initialise une nouvelle instance de la classe Binding qui lie la propriété du contrôle indiquée aux données membres spécifiées de la source de données et permet éventuellement l'application de la mise en forme.
Méthode publiqueBinding(String, Object, String, Boolean, DataSourceUpdateMode)Initialise une nouvelle instance de la classe Binding qui établit une liaison de la propriété du contrôle spécifiée aux données membres spécifiées de la source de données indiquée. Active éventuellement la mise en forme et propage les valeurs à la source de données en fonction du paramètre de mise à jour spécifié.
Méthode publiqueBinding(String, Object, String, Boolean, DataSourceUpdateMode, Object)Initialise une nouvelle instance de la classe Binding qui établit une liaison de la propriété du contrôle spécifiée aux données membres spécifiées de la source de données indiquée. Active éventuellement la mise en forme, propage les valeurs à la source de données en fonction du paramètre de mise à jour spécifié et affecte à la propriété la valeur spécifiée lorsqu'un DBNull est retourné à partir de la source de données.
Méthode publiqueBinding(String, Object, String, Boolean, DataSourceUpdateMode, Object, String)Initialise une nouvelle instance de la classe Binding qui établit une liaison de la propriété du contrôle spécifiée aux données membres spécifiées de la source de données indiquée. Active éventuellement la mise en forme avec la chaîne de format spécifiée, propage les valeurs à la source de données en fonction du paramètre de mise à jour spécifié, et affecte à la propriété la valeur spécifiée lorsque DBNull est retourné à partir de la source de données.
Méthode publiqueBinding(String, Object, String, Boolean, DataSourceUpdateMode, Object, String, IFormatProvider)Initialise une nouvelle instance de la classe Binding avec la propriété du contrôle spécifiée aux données membres spécifiées de la source de données indiquée. Active éventuellement la mise en forme avec la chaîne de mise en forme spécifiée, propage les valeurs à la source de données en fonction du paramètre de mise à jour spécifié, active la mise en forme avec la chaîne de mise en forme spécifiée, affecte à la propriété la valeur spécifiée lorsqu'un DBNull est retourné à partir de la source de données et définit le fournisseur de format spécifié.
Début
  NomDescription
Propriété publiqueBindableComponentObtient le contrôle auquel Binding est associé.
Propriété publiqueBindingManagerBaseObtient le BindingManagerBase pour ce Binding.
Propriété publiqueBindingMemberInfoExtrait un objet qui contient des informations sur cette liaison par l'intermédiaire du paramètre dataMember dans le constructeur Binding.
Propriété publiqueControlObtient le contrôle auquel cette liaison appartient.
Propriété publiqueControlUpdateModeObtient ou définit lorsque les modifications à la source de données sont propagées à la propriété du contrôle lié.
Propriété publiqueDataSourceObtient la source de données pour cette liaison.
Propriété publiqueDataSourceNullValueObtient ou définit la valeur à stocker dans la source de données si la valeur de contrôle est null ou vide.
Propriété publiqueDataSourceUpdateModeObtient ou définit une valeur lorsque les modifications de la propriété du contrôle lié sont propagées à la source de données.
Propriété publiqueFormatInfoObtient ou définit IFormatProvider qui fournit le comportement de mise en forme personnalisé.
Propriété publiqueFormatStringObtient ou définit les caractères spécificateurs de format qui indiquent comment une valeur doit s'afficher.
Propriété publiqueFormattingEnabledObtient ou définit une valeur qui indique si la conversion de type et la mise en forme s'appliquent aux données de propriété du contrôle.
Propriété publiqueIsBindingObtient une valeur indiquant si la liaison est active.
Propriété publiqueNullValueObtient ou définit Object à définir comme propriété du contrôle lorsque la source de données contient une valeur DBNull.
Propriété publiquePropertyNameObtient ou définit le nom de la propriété du contrôle lié aux données.
Début
  NomDescription
Méthode publiqueEquals(Object)Détermine si l'objet spécifié est identique à l'objet actuel. (Hérité de Object.)
Méthode protégéeFinalize Autorise un objet à tenter de libérer des ressources et d'exécuter d'autres opérations de nettoyage avant qu'il ne soit récupéré par l'opération garbage collection. (Hérité de Object.)
Méthode publiqueGetHashCodeSert de fonction de hachage par défaut. (Hérité de Object.)
Méthode publiqueGetTypeObtient le Type de l'instance actuelle. (Hérité de Object.)
Méthode protégéeMemberwiseCloneCrée une copie superficielle de l'objet Object actuel. (Hérité de Object.)
Méthode protégéeOnBindingCompleteDéclenche l'événement BindingComplete.
Méthode protégéeOnFormatDéclenche l'événement Format.
Méthode protégéeOnParseDéclenche l'événement Parse.
Méthode publiqueReadValueAffecte la valeur lue de la source de données à la propriété du contrôle.
Méthode publiqueToStringRetourne une chaîne qui représente l'objet actif. (Hérité de Object.)
Méthode publiqueWriteValueLit la valeur actuelle de la propriété du contrôle et l'écrit dans la source de données.
Début
  NomDescription
Événement publicBindingCompleteSe produit lorsque la propriété FormattingEnabled a la valeur true et lorsqu'une opération de liaison est terminée, comme lorsque des données font l'objet d'un push depuis le contrôle vers la source de données ou inversement.
Événement publicFormatSe produit lorsque la propriété du contrôle est liée à une valeur de données.
Événement publicParseSe produit lorsque la valeur d'un contrôle lié aux données est modifiée.
Début

Utilisez la classe Binding pour créer et gérer une liaison simple entre la propriété du contrôle et la propriété d'un objet, ou la propriété de l'objet en cours dans une liste d'objets.

Dans le premier cas, vous pouvez par exemple lier la propriété Text d'un contrôle TextBox à la propriété FirstName d'un objet Customer. Dans le second cas, vous pouvez par exemple lier la propriété Text d'un contrôle TextBox à la propriété FirstName d'un DataTable contenant des clients.

La classe Binding vous permet également de formater des valeurs pour les afficher à l'aide de l'événement Format et de récupérer des valeurs mises en forme à l'aide de l'événement Parse.

Lorsque vous construisez une instance de Binding avec le constructeur Binding, vous devez spécifier trois éléments :

  • Nom de la propriété du contrôle à lier.

  • Source de données.

  • Chemin de navigation résolu en une liste ou propriété dans la source de données. Le chemin de navigation est également utilisé pour créer le BindingMemberInfo de l'objet.

Premièrement, vous devez spécifier le nom de la propriété du contrôle à laquelle vous souhaitez lier les données. Par exemple, pour afficher des données dans un contrôle TextBox, spécifiez la propriété Text.

Ensuite, vous pouvez spécifier une instance de l'une des classes du tableau suivant en tant que source de données.

Description

Exemple C#

Toute classe qui implémente IBindingList ou ITypedList. Sont inclus : DataSet, DataTable, DataView et DataViewManager.

DataSet ds = new DataSet("myDataSet");

Toute classe qui implémente IList pour créer une collection d'objets indexée. La collection doit être créée et remplie avant la création du Binding. Les objets dans la liste doivent tous être du même type, sinon une exception est levée.

ArrayList ar1 = new ArrayList;

Customer1 cust1 = new Customer("Louis");

ar1.Add(cust1);

IList fortement typé d'objets fortement typés

Customer [] custList = new Customer[3];

Troisièmement, vous devez spécifier le chemin de navigation, qui peut être une chaîne vide (""), un nom de propriété, ou une hiérarchie de noms séparés par des points. Si vous spécifiez un chemin de navigation égal à une chaîne vide, la méthode ToString est appelée sur l'objet source de données sous-jacent.

Si la source de données est un DataTable, qui peut contenir plusieurs objets DataColumn, le chemin de navigation doit être utilisé pour pointer vers une colonne spécifique.

RemarqueRemarque

Si la source de données est un objet DataSet, DataViewManager ou DataTable, vous créez en fait une liaison à un objet DataView. Par conséquent, les lignes liées sont en fait des objets DataRowView.

Un chemin de navigation séparé par des points est requis si la source de données est affectée à un objet qui contient plusieurs objets DataTable (tel qu'un DataSet ou un DataViewManager). Vous pouvez également utiliser un chemin de navigation séparé par des points quand vous établissez une liaison à un objet dont les propriétés retournent des références à d'autres objets (tels qu'une classe comprenant des propriétés qui retournent d'autres objets de classe). Par exemple, les chemins de navigation suivants décrivent tous les champs de données valides :

  • " Size.Height "

  • " Suppliers.CompanyName "

  • " Regions.regionsToCustomers.CustomerFirstName "

  • " Regions.regionsToCustomers.customersToOrders.ordersToDetails.Quantity "

Chaque membre du chemin d'accès peut retourner une propriété qui correspond à une valeur unique (telle qu'un entier), ou une liste de valeurs (telle qu'un tableau de chaînes). Bien que chaque membre du chemin d'accès puisse être une liste ou une propriété, le membre final doit correspondre à une propriété. Chaque membre construit à partir du membre précédent : "Size.Height" correspond à la propriété Height pour le Size en cours ; "Regions.regionsToCustomers.CustomerFirstName" correspond au prénom du client en cours, le client étant l'un des clients dans la région en cours.

Un DataRelation retourne une liste de valeurs en liant un DataTable à un deuxième DataTable dans un DataSet. Si le DataSet contient des objets DataRelation, vous pouvez spécifier les données membres comme étant un TableName suivi par un RelationName, puis un ColumnName. Par exemple, si l'objet DataTable appelé " Suppliers " contient un objet DataRelation appelé " suppliers2products ", les données membres peuvent être les " Suppliers.suppliers2products.ProductName ".

La source de données peut être un ensemble de classes connexes. Par exemple, supposons qu'un ensemble de classes référence les systèmes solaires. La classe nommée System contient une propriété nommée Stars qui retourne une collection d'objets Star. Chaque objet Star a des propriétés Name et Mass, ainsi qu'une propriété Planets qui retourne une collection d'objets Planet. Dans ce système, chaque planète possède également des propriétés Mass et Name. De plus, chaque objet Planet a une propriété Moons qui retourne une collection d'objets Moon, dont chacun a également des propriétés Name et Mass. Si vous spécifiez un objet System comme source de données, vous pouvez spécifier l'un des objets suivants comme données membres :

  • " Stars.Name "

  • " Stars.Mass "

  • " Stars.Planets.Name "

  • " Stars.Planets.Mass "

  • " Stars.Planets.Moons.Name "

  • " Stars.Planets.Moons.Mass "

Les contrôles qui peuvent être à liaison simple comprennent une collection d'objets Binding dans un ControlBindingsCollection, à laquelle vous pouvez accéder à l'aide de la propriété DataBindings du contrôle. Vous ajoutez un Binding à la collection en appelant la méthode Add, et vous liez ainsi une propriété du contrôle à une propriété d'un objet (ou à une propriété de l'objet en cours dans une liste).

Vous pouvez créer une liaison simple avec tout objet dérivé de la classe System.Windows.Forms.Control, par exemple, les contrôles Windows suivants :

RemarqueRemarque

Seule la propriété SelectedValue des contrôles ComboBox, CheckedListBox et ListBox est à liaison simple.

La classe BindingManagerBase est une classe abstraite qui gère tous les objets Binding pour une source de données et des données membres particulières. Les classes dérivées de BindingManagerBase sont les classes CurrencyManager et PropertyManager. La gestion d'un Binding est différente suivant que Binding est une liaison de liste ou une liaison de propriété. Par exemple, s'il s'agit d'une liaison de liste, vous pouvez utiliser le BindingManagerBase pour spécifier un Position dans la liste ; le Position détermine par conséquent l'élément (parmi les éléments de la liste) qui est effectivement lié à un contrôle. Pour retourner le BindingManagerBase approprié, utilisez le BindingContext.

Pour ajouter une nouvelle ligne à un ensemble de contrôles liés au même DataSource, utilisez la méthode AddNew de la classe BindingManagerBase. Utilisez la propriété Item de la classe BindingContext pour retourner le CurrencyManager approprié. Pour abandonner l'ajout de la nouvelle ligne, utilisez la méthode CancelCurrentEdit.

L'exemple de code suivant crée un Windows Form comprenant plusieurs contrôles qui créent une liaison de données simple. L'exemple crée un DataSet comprenant deux tables nommées Customers et Orders, et un DataRelation nommé custToOrders. Quatre contrôles (un DateTimePicker et trois TextBox) sont liés aux données de colonnes dans les tables. Pour chaque contrôle, l'exemple crée et ajoute un Binding au contrôle à l'aide de la propriété DataBindings. L'exemple retourne un BindingManagerBase pour chaque table par l'intermédiaire du BindingContext du formulaire. Quatre contrôles Button incrémentent ou décrémentent la propriété Position sur les objets BindingManagerBase.


using System;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Windows.Forms;

public class Form1 : System.Windows.Forms.Form
{
   private System.ComponentModel.Container components;
   private Button button1;
   private Button button2;
   private Button button3;
   private Button button4;
   private TextBox text1;
   private TextBox text2;
   private TextBox text3;

   private BindingManagerBase bmCustomers;
   private BindingManagerBase bmOrders;
   private DataSet ds;
   private DateTimePicker DateTimePicker1;

   public Form1()
   {
      // Required for Windows Form Designer support.
      InitializeComponent();
      // Call SetUp to bind the controls.
      SetUp();
   }

   private void InitializeComponent()
   {
      // Create the form and its controls.
      this.components = new System.ComponentModel.Container();
      this.button1 = new System.Windows.Forms.Button();
      this.button2 = new System.Windows.Forms.Button();
      this.button3 = new System.Windows.Forms.Button();
      this.button4 = new System.Windows.Forms.Button();

      this.text1= new System.Windows.Forms.TextBox();
      this.text2= new System.Windows.Forms.TextBox();
      this.text3= new System.Windows.Forms.TextBox();

      this.DateTimePicker1 = new DateTimePicker();

      this.Text = "Binding Sample";
      this.ClientSize = new System.Drawing.Size(450, 200);

      button1.Location = new System.Drawing.Point(24, 16);
      button1.Size = new System.Drawing.Size(64, 24);
      button1.Text = "<";
      button1.Click+=new System.EventHandler(button1_Click);

      button2.Location = new System.Drawing.Point(90, 16);
      button2.Size = new System.Drawing.Size(64, 24);
      button2.Text = ">";
      button2.Click+=new System.EventHandler(button2_Click);

      button3.Location = new System.Drawing.Point(90, 100);
      button3.Size = new System.Drawing.Size(64, 24);
      button3.Text = "<";
      button3.Click+=new System.EventHandler(button3_Click);

      button4.Location = new System.Drawing.Point(150, 100);
      button4.Size = new System.Drawing.Size(64, 24);
      button4.Text = ">";
      button4.Click+=new System.EventHandler(button4_Click);

      text1.Location = new System.Drawing.Point(24, 50);
      text1.Size = new System.Drawing.Size(150, 24);

      text2.Location = new System.Drawing.Point(190, 50);
      text2.Size = new System.Drawing.Size(150, 24);

      text3.Location = new System.Drawing.Point(290, 150);
      text3.Size = new System.Drawing.Size(150, 24);

      DateTimePicker1.Location = new System.Drawing.Point(90, 150);
      DateTimePicker1.Size = new System.Drawing.Size(200, 800);

      this.Controls.Add(button1);
      this.Controls.Add(button2);
      this.Controls.Add(button3);
      this.Controls.Add(button4);
      this.Controls.Add(text1);
      this.Controls.Add(text2);
      this.Controls.Add(text3);
      this.Controls.Add(DateTimePicker1);
   }

   protected override void Dispose( bool disposing ){
      if( disposing ){
         if (components != null){
            components.Dispose();}
      }
      base.Dispose( disposing );
   }
   public static void Main()
   {
      Application.Run(new Form1());
   }

   private void SetUp()
   {
      // Create a DataSet with two tables and one relation.
      MakeDataSet();
      BindControls();
   }

   protected void BindControls()
   {
      /* Create two Binding objects for the first two TextBox 
         controls. The data-bound property for both controls 
         is the Text property. The data source is a DataSet 
         (ds). The data member is the  
         "TableName.ColumnName" string. */
      text1.DataBindings.Add(new Binding
      ("Text", ds, "customers.custName"));
      text2.DataBindings.Add(new Binding
      ("Text", ds, "customers.custID"));

      /* Bind the DateTimePicker control by adding a new Binding. 
         The data member of the DateTimePicker is a 
         TableName.RelationName.ColumnName string. */
      DateTimePicker1.DataBindings.Add(new 
      Binding("Value", ds, "customers.CustToOrders.OrderDate"));

      /* Add event delegates for the Parse and Format events to a 
         new Binding object, and add the object to the third 
         TextBox control's BindingsCollection. The delegates 
         must be added before adding the Binding to the 
         collection; otherwise, no formatting occurs until 
         the Current object of the BindingManagerBase for 
         the data source changes. */
         Binding b = new Binding
         ("Text", ds, "customers.custToOrders.OrderAmount");
      b.Parse+=new ConvertEventHandler(CurrencyStringToDecimal);
      b.Format+=new ConvertEventHandler(DecimalToCurrencyString);
      text3.DataBindings.Add(b);

      // Get the BindingManagerBase for the Customers table. 
      bmCustomers = this.BindingContext [ds, "Customers"];

      /* Get the BindingManagerBase for the Orders table using the 
         RelationName. */ 
      bmOrders = this.BindingContext[ds, "customers.CustToOrders"];
   }

   private void DecimalToCurrencyString(object sender, ConvertEventArgs cevent)
   {
      /* This method is the Format event handler. Whenever the 
         control displays a new value, the value is converted from 
         its native Decimal type to a string. The ToString method 
         then formats the value as a Currency, by using the 
         formatting character "c". */

      // The application can only convert to string type. 
      if(cevent.DesiredType != typeof(string)) return;

      cevent.Value = ((decimal) cevent.Value).ToString("c");
   }

   private void CurrencyStringToDecimal(object sender, ConvertEventArgs cevent)
   {   
      /* This method is the Parse event handler. The Parse event 
         occurs whenever the displayed value changes. The static 
         ToDecimal method of the Convert class converts the 
         value back to its native Decimal type. */

      // Can only convert to decimal type.
      if(cevent.DesiredType != typeof(decimal)) return;

      cevent.Value = Decimal.Parse(cevent.Value.ToString(),
      	NumberStyles.Currency, null);

      /* To see that no precision is lost, print the unformatted 
         value. For example, changing a value to "10.0001" 
         causes the control to display "10.00", but the 
         unformatted value remains "10.0001". */
      Console.WriteLine(cevent.Value);
   }

   private void button1_Click(object sender, System.EventArgs e)
   {
      // Go to the previous item in the Customer list.
      bmCustomers.Position -= 1;
   }

   private void button2_Click(object sender, System.EventArgs e)
   {
      // Go to the next item in the Customer list.
      bmCustomers.Position += 1;
   }

   private void button3_Click(object sender, System.EventArgs e)
   {
      // Go to the previous item in the Orders list.
      bmOrders.Position-=1;
   }

   private void button4_Click(object sender, System.EventArgs e)
   {
      // Go to the next item in the Orders list.
      bmOrders.Position+=1;
   }

   // Create a DataSet with two tables and populate it.
   private void MakeDataSet()
   {
      // Create a DataSet.
      ds = new DataSet("myDataSet");

      // Create two DataTables.
      DataTable tCust = new DataTable("Customers");
      DataTable tOrders = new DataTable("Orders");

      // Create two columns, and add them to the first table.
      DataColumn cCustID = new DataColumn("CustID", typeof(int));
      DataColumn cCustName = new DataColumn("CustName");
      tCust.Columns.Add(cCustID);
      tCust.Columns.Add(cCustName);

      // Create three columns, and add them to the second table.
      DataColumn cID = 
         new DataColumn("CustID", typeof(int));
      DataColumn cOrderDate = 
         new DataColumn("orderDate",typeof(DateTime));
      DataColumn cOrderAmount = 
         new DataColumn("OrderAmount", typeof(decimal));
      tOrders.Columns.Add(cOrderAmount);
      tOrders.Columns.Add(cID);
      tOrders.Columns.Add(cOrderDate);

      // Add the tables to the DataSet.
      ds.Tables.Add(tCust);
      ds.Tables.Add(tOrders);

      // Create a DataRelation, and add it to the DataSet.
      DataRelation dr = new DataRelation
      ("custToOrders", cCustID , cID);
      ds.Relations.Add(dr);

      /* Populate the tables. For each customer and order, 
         create two DataRow variables. */
      DataRow newRow1;
      DataRow newRow2;

      // Create three customers in the Customers Table.
      for(int i = 1; i < 4; i++)
      {
         newRow1 = tCust.NewRow();
         newRow1["custID"] = i;
         // Add the row to the Customers table.
         tCust.Rows.Add(newRow1);
      }
      // Give each customer a distinct name.
      tCust.Rows[0]["custName"] = "Alpha";
      tCust.Rows[1]["custName"] = "Beta";
      tCust.Rows[2]["custName"] = "Omega";

      // For each customer, create five rows in the Orders table.
      for(int i = 1; i < 4; i++)
      {
         for(int j = 1; j < 6; j++)
         {
            newRow2 = tOrders.NewRow();
            newRow2["CustID"]= i;
            newRow2["orderDate"]= new DateTime(2001, i, j * 2);
            newRow2["OrderAmount"] = i * 10 + j  * .1;
            // Add the row to the Orders table.
            tOrders.Rows.Add(newRow2);
         }
      }
   }
 }



.NET Framework

Pris en charge dans : 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (rôle principal du serveur non pris en charge), Windows Server 2008 R2 (rôle principal du serveur pris en charge avec SP1 ou version ultérieure ; Itanium non pris en charge)

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.
Tout membre static (Shared en Visual Basic) public de ce type est thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.
Cela vous a-t-il été utile ?
(1500 caractères restants)
Merci pour vos suggestions.

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft. Tous droits réservés.