Michel Perfetti
DataBinding sur la base de registre
Le databinding permet sans difficulté d'étendre le modèle, sur autre chose que des objets, une base de données ou des webservices. Nous allons voir qu
Par Michel Perfetti publié le 14/11/2005 à 08:08, lu 8126 fois, 3 pages
 1 | Introduction
Téléchargez le code source - 28 Kb
Introduction
Cet article présente une utilisation du Databinding pour connecter directement une fenêtre Windows Form à la base de registre. Mais cela n'est qu'une excuse pour montrer une des possibilités du databinding qui est l'utilisation de propriétés personnalisées.

La classe RegistryKey ne possède pas de propriétés associées à chaque champ valeur de la clé considérée. Le mécanisme de databinding permet de personnaliser les propriétés d'un objet que l'on peut connecter, et même d'en créer une « vue » personnalisée de l'objet. Pour vous familiariser avec le databinding, je vous conseille de voir les webcasts de Mitsu et Pierre à ce sujet, à visionner sans modération !

Le projet en téléchargement fournir un exemple de binding de la base de registre :



Tous les champs de la fenêtre sont reliés à la base de registre, y compris les coordonnées et la taille de la fenêtre. Le binding est réalisé au moment du clic sur le bouton « bind ». Pour faire fonctionner la démo il suffit de fusionner le fichier .reg fournit dans la solution avec la base de registre. Il ajoute les clés suivantes :
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\DemoBinding]
"MyDate"="03/07/2006"
"FormSize"="532; 211"
"FormTitle"="Binding de registry"
"FormLocation"="338; 473"

[HKEY_CURRENT_USER\DemoBinding\a]
"Age"="10"
"Name"="Fifi"

[HKEY_CURRENT_USER\DemoBinding\b]
"Age"="10"
"Name"="Riri"

[HKEY_CURRENT_USER\DemoBinding\c]
"Age"="15"
"Name"="Loulou"


En ce qui concerne le binding, il s'effectue en 3 étapes :
  1. Déclaration des valeurs et de leurs types
  2. Affectation de la clé de la base de registre aux valeurs définies ci-dessus
  3. Liaison avec les composants visuels
private void bindButton_Click(object sender, EventArgs e)
{
    //Connexion  la cl qui va contenir les coordones, la taille de la fentre etc...
    RegistryKey key = Registry.CurrentUser.OpenSubKey("DemoBinding",true);

    RegistryKeyView RegistryKeyViewPattern = new RegistryKeyView();
    RegistryKeyViewPattern.MapKeyValue("FormTitle", typeof(string));
    RegistryKeyViewPattern.MapKeyValue("MyDate", typeof(DateTime));
    RegistryKeyViewPattern.MapKeyValue("FormLocation", typeof(Point));
    RegistryKeyViewPattern.MapKeyValue("FormSize", typeof(Size));
    keyBinder = RegistryKeyViewPattern.Duplicate(key);

    // Creation de la liste pour la datagrid
    clientList = new BindingList<RegistryKeyView>();


    
    RegistryKeyViewPattern = new RegistryKeyView();
    RegistryKeyViewPattern.MapKeyValue("Name", typeof(string));
    RegistryKeyViewPattern.MapKeyValue("Age", typeof(uint));

    clientList.Add(RegistryKeyViewPattern.Duplicate(Registry.CurrentUser.OpenSubKey(@"DemoBinding\a", true)));
    clientList.Add(RegistryKeyViewPattern.Duplicate(Registry.CurrentUser.OpenSubKey(@"DemoBinding\b", true)));
    clientList.Add(RegistryKeyViewPattern.Duplicate(Registry.CurrentUser.OpenSubKey(@"DemoBinding\c", true)));

    clientList.AllowNew = false;
    clientList.AllowRemove = false;
    dataGridView.DataSource = clientList;

    textBox.DataBindings.Add("Text", keyBinder, "FormTitle");        
    dateTimePicker.DataBindings.Add("Value", keyBinder, "MyDate");
    this.DataBindings.Add("Location", keyBinder, "FormLocation");
    this.DataBindings.Add("Size", keyBinder, "FormSize");
    this.DataBindings.Add("Text", keyBinder, "FormTitle");
    bindButton.Enabled = false;
}
Par simplicité, les valeurs manipulées de la base de registre sont toutes des valeurs de type chaîne de caractère. Mais comme le voyons avec les types manipulés dans la démo (une date, des coordonnées...), cela ne nous empêche pas d'utiliser des types complexes qui nécessitent des conversions.
 
» Démarrer une discussion