OVH Cloud OVH Cloud

Custom Binding avec un DataGridView

1 réponse
Avatar
Cyril
Bonjour,

Je souhaite cr=E9er un DataGridView g=E9n=E9rique pouvant faire du binding
sur diff=E9rents objets donn=E9es =E0 l'ex=E9cution.

Je m'explique, avec les BindingList on peut facilement cr=E9er un objet
et cr=E9er une liste pour la "binder" dans un datagridview. Par exemple
une classe Client avec un Nom et Prenom mis dans une BindingList est
tr=E8s bien prise en compte dans le datagridview.
Le probl=E8me ici c'est que l'on est oblig=E9 de creer une classe pour
chaque type de donn=E9es que l'on veut afficher. Je voudrais faire une
classe a laquelle a l'ex=E9cution on envoi un ensemble de champs.
Reprenons notre exemple, notre classe Client poss=E8de un Nom et Prenom
mais si on veut faire la m=EAme chose avec une classe Produit par
exemple qui poss=E8de le m=EAme type de champ texte Nom et Categorie, on
est obliger de cr=E9er une nouvelle classe.

Le but serait d'envoyer =E0 cet objet un ensemble de couple : type de
donn=E9e et propri=E9t=E9 de l'objet a "binder".
Dans notre exemple ce serait pour Client un objet oText et la
propri=E9t=E9 String (pour le Nom) et de mani=E8re similaire un objet
oText et la propri=E9t=E9 String (pour le pr=E9nom). Mais si on voulait
afficher deux fois le Nom il faudrait envoyer deux fois l'objet oText
pour le nom et pas cr=E9er une autre classe Client poss=E9dant deux
propri=E9t=E9s pour le nom.

L'utilisation pourrait alors =EAtre du type suivant pour afficher une
liste comportant la le nom d'un client, le nom d'un produit et le
nom d'un fournisseur :

DataGridViewGenerique dgvg =3D DataGridViewGenerique();
dgvg.DataSourceGenerique =3D new List(new Client, new Produit, new
Fournisseur);
dgvg.DataSourceBinding =3D new List("NomClient", "NomProduit",
"NomFournisseur");

Pour "binder" seulement le client et le fournisseur :

DataGridViewGenerique dgvg =3D DataGridViewGenerique();
dgvg.DataSourceGenerique =3D new List(new Client, new Fournisseur);
dgvg.DataSourceBinding =3D new List("NomClient", "NomFournisseur");

Je vous remercie d'avance pour vos r=E9ponses, suggestions, id=E9es ou
toutes autres remarques.
Cyril

1 réponse

Avatar
zob
Bon j'ai fais une réponse mais je l'ais envoyé a ton adresse mail... et
voila trop pressé je fais des bétises.
Vu que je n'ai pas envie de tout retaper, préviens moi si tu n'avances pas
et je te filerais plus de détails...

Encore désolé.

"Cyril" a écrit dans le message de news:

Bonjour,

Je souhaite créer un DataGridView générique pouvant faire du binding
sur différents objets données à l'exécution.

Je m'explique, avec les BindingList on peut facilement créer un objet
et créer une liste pour la "binder" dans un datagridview. Par exemple
une classe Client avec un Nom et Prenom mis dans une BindingList est
très bien prise en compte dans le datagridview.
Le problème ici c'est que l'on est obligé de creer une classe pour
chaque type de données que l'on veut afficher. Je voudrais faire une
classe a laquelle a l'exécution on envoi un ensemble de champs.
Reprenons notre exemple, notre classe Client possède un Nom et Prenom
mais si on veut faire la même chose avec une classe Produit par
exemple qui possède le même type de champ texte Nom et Categorie, on
est obliger de créer une nouvelle classe.

Le but serait d'envoyer à cet objet un ensemble de couple : type de
donnée et propriété de l'objet a "binder".
Dans notre exemple ce serait pour Client un objet oText et la
propriété String (pour le Nom) et de manière similaire un objet
oText et la propriété String (pour le prénom). Mais si on voulait
afficher deux fois le Nom il faudrait envoyer deux fois l'objet oText
pour le nom et pas créer une autre classe Client possédant deux
propriétés pour le nom.

L'utilisation pourrait alors être du type suivant pour afficher une
liste comportant la le nom d'un client, le nom d'un produit et le
nom d'un fournisseur :

DataGridViewGenerique dgvg = DataGridViewGenerique();
dgvg.DataSourceGenerique = new List(new Client, new Produit, new
Fournisseur);
dgvg.DataSourceBinding = new List("NomClient", "NomProduit",
"NomFournisseur");

Pour "binder" seulement le client et le fournisseur :

DataGridViewGenerique dgvg = DataGridViewGenerique();
dgvg.DataSourceGenerique = new List(new Client, new Fournisseur);
dgvg.DataSourceBinding = new List("NomClient", "NomFournisseur");

Je vous remercie d'avance pour vos réponses, suggestions, idées ou
toutes autres remarques.
Cyril