Changer le Binding de table de données, passer d'une table à un autre dans le DG [Résolu]

Messages postés
34
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
22 juin 2011
- - Dernière réponse : bobarman
Messages postés
34
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
22 juin 2011
- 26 mai 2011 à 11:24
Bonjour,
je développe une application avec une base de données sur VB2008.
Il y a plusieurs table dans la base et je voudrais pouvoir voir les données dans un datagridview.

Je glisse la table du DataSet dans l'explorateur de données vers vers ma fenêtre, et il me créé automatiquement un BindingNavigator un TableAdapter
un TableAdapterManager un BindingSource et un datagridview.

Maintenant je voudrais, à l'aide d'un bouton pouvoir passer d'une table a une autre dans mon DataGridView et je n'y arrive pas.

J'ai essayé de changer le DataMember du BindingSource, en fait j'ai essayé pas mal de choses avec 0 résultât. Je ne sais pas du tout faire çà.

Est ce que quelqu'un connait l'astuce?

Clement B
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
34
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
22 juin 2011
3
Merci
Ok, fait il y a un peu plus propre et plus simple...

Alors en fait, il faut arrêter et redémarrer le binding au niveaux des trois éléments (BindingNavigator, BindingSource, DataGridView)
Mais il faut aussi ajouter les tableadapter des différentes tables de la base. Pour ce faire dans les propriété du BindingSource => datamember
faire passer toutes les tables, à chaque table un table adapter s'ajoute à la form.

Le Code
Me.BSMain.DataMember = "LaTableQuiVaBien"
Me.BSMain.ResetBindings(True)
Me.DataGridView1.DataSource = Nothing
For i As Byte = 0 To Me.components.Components.Count - 1
'Si le composant est un bindingsource alors
If TypeOf Me.components.Components(i) Is BindingSource Then
'on définit bn comme ce composant
Dim bn As BindingSource =
CType(Me.components.Components(i), BindingSource)

'Si le Datamember est le nom de la table que l'on veut
'afficher alors,
If bn.DataMember.ToString = "LaTableQuiVaBien" Then
Me.DataGridView1.DataSource =
CType(Me.components.Components(i), BindingSource)
'On affecte ce bindingsource au BindingNavigator
Me.BindingNavigator1.BindingSource =
CType(Me.components.Components(i), BindingSource)
End If
End If
Next

Clement B

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 196 internautes nous ont dit merci ce mois-ci

Commenter la réponse de bobarman
Messages postés
149
Date d'inscription
lundi 24 décembre 2007
Statut
Membre
Dernière intervention
16 juillet 2013
2
0
Merci
Bonjour,

Il faudrait que tu créé un dataset par table et lorsque tu change de table, tu changes le dataset associé au datagridview.

Ou tu créé un dataset avec plusieurs tables et lorsque tu changes de table, tu changes la table du dataset asocié au datagridview...

tonDataGridView.SetDataBinding(tonDataSet, "tonNomDeTable")
Commenter la réponse de alexandrevandenberghe
Messages postés
34
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
22 juin 2011
0
Merci
Merci de ta réponse,

Elle marcherait dans certain cas mais pas dans le mien.

Je m'explique: ce n'est pas les datagridview's qu'il faut que je bind sur une autre table, mais le bindingsource auquel tout le monde est attachés (les textboxs le bindingNavigator et le dataGridView).

J'ai trouvé une solution très moche dans un premier temps puis la une seconde en te lisant.

Solution très moche:
Faire glisser toute les tables dans la fenètre, ainsi cela créé 1 BindingNavigator un TableAdapterManager et autant de DatagridView, TableAdapter et BindingSource que de tables.
Après on a juste a reBinder le BindingNavigator le bindingSource adéquat et faire apparaitre le bon DataGridView.

Solution plus légère mais non-testé:
Laisser tomber les BindingSource créer un objet Binder qui va faire le boulot du BindingSource en gérant plusieurs tables, mais c'est qu'en même coton.

Si j'arrive à l'écrire correctement, je posterais peut être ma source.

Clement B
Commenter la réponse de bobarman