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

Résolu
bobarman Messages postés 29 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 22 juin 2011 - 6 mai 2011 à 16:06
bobarman Messages postés 29 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

3 réponses

bobarman Messages postés 29 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 22 juin 2011 1
26 mai 2011 à 11:24
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
3
Utilisateur anonyme
11 mai 2011 à 10:31
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")
0
bobarman Messages postés 29 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 22 juin 2011 1
13 mai 2011 à 11:17
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
0
Rejoignez-nous