Compléments sur le DataBinding

Le DataBinding permet de lier à un contrôle (composant graphique) à un fournisseur de données ; ceci permet d'alléger les taches de développement de l'interface visuelle. Le mécanisme s'il est souvent simple à mettre en oeuvre n'en est pas moins d'une certaine compléxité à maitriser.

1) Les fournisseurs de données.

Ils sont très divers ; il s'agit souvent d'une DataTable mais ce peut être un fichier XML ou encore une ArrayList.

Exemple avec une ArrayList.

fig 1 ArrayList comme fournisseur de données

Mise en oeuvre :

Le comboBox est mis à jour à chaque click. Notons au passage que l'on peut ainsi charger un ComboBox en utilisant cette technique -sans utiliser explicitement la méthode Add-

2) Les consommateurs de données

Il s'agit des contrôles (composants graphiques) qui peuvent supporter le DataBinding. La plupart des contrôles peuvent "consommer" des données. Ceux-ci sont de deux types, les contrôles qui ne consomment qu'une donnée à la fois -zône de texte ou label par exmple- et ceux qui en consomment plusieurs -liste, datagrid par exemple-

Exemple d'une zône de texte.

Ajoutons un TextBox et lions-le à l'ArrayList :

fig 2 liaison d'unTextBox

La liaison s'effectue en ajoutant une "liaison" dans le constructeur :

txtListe.DataBindings.Add("Text",liste,"");

Commentaires :

Retour au cours

3) DataTable

C'est le fournisseur de données qui est le plus utile, la liaison d'un contrôle et d'une DataTable a été souvent mise en oeuvre dans le cas AutoEcole. Nous n'y reviendrons pas ici.

4) DataView

C'est un objet intermédiaire entre la DataTable et le contrôle lié. Ce dernier ne fait que présenter les données. Nous l'avons utilisé à plusieurs reprise notamment dans le formulaire de saisie d'une leçon :

fig 3 synchronisation entre le ComboBox et la zône de texte


Un objet DataView avait été déposé en mode conception.

Revenons sur les différentes responsabilités des objets en présence :

Mais dès que nous créons une DataTable, Visual Studio génère un DataView par défaut. Ainsi dans le formulaire de saisie d'une leçon nous pouvions nous passer du contrôle DataView et utiliser celui qui est généré par défaut, le code aurait été le suivant :

cmbEleve.DataSource = monDS1.ELEVE.DefaultView; // on utilise le DataView par défaut

cmbEleve.ValueMember = "code";

cmbEleve.DisplayMember = "nom";

txtCredit.DataBinding.Add("Text",monDS1.ELEVE.DefaultView,"creditHoraire");

Même s'il est plus simple de "déposer" un DataView en mode conception, il est important de comprendre ce mécanisme notamment pour les cas où le DataView ne peut être créé à la conception.