DataBinding ComboBox d'un champ de type entier avec vb.net et ado.net [Résolu]

Messages postés
120
Date d'inscription
mardi 11 février 2003
Dernière intervention
9 mars 2008
- - Dernière réponse : jpeman
Messages postés
22
Date d'inscription
samedi 18 janvier 2003
Dernière intervention
24 mai 2005
- 24 mai 2005 à 14:18
Bonjour à tous

J'essai de faire un DataBinding sur un combobox et sa marche presque, il n'y a qu'un problèmme que j'expose ici.

Voila j'ai deux table dans ma base de données
une table

element
NoEl de type Auto increment donc un entier
TypeEl de type chaine de caractère
DescEl de type chaine de caractère

une table facturation qui contient plusieurs champs dont :
NoEl --> fait référence au champ NoEl de la table element

Voila ce que je veut faire c'est afficher tout les DescEl d'un TypeEl de la table elementdans le comboBox et le binder avec NoEl de facturation.
Je sait sa a l'air tordu ou même impossible, mais sa se fait c'est certain avec des AddHandler pour parse et format je l'ai fait pour un CheckBox binder avec un champ texte. Bon

Dans mon programme il y a des dizaine de ComboBox alors je fait une classe pour faire ce Binding.

Bon maintenant que j'ai expliquer ce que je veut faire et de quelle facon je met le code de la classe et ensuite j'explique ce qui fonctionne pas.

'Classe BindingCbo
But : Permet de binder un champ de type entier d'un DataSet à un combobox (Type chaine)
'Ce qui fait dirrectement le transfert dans le DataSet pour le NoEl, mais affiche DescEl

Public Class BindingCbo

Private m_cboCtrl As ComboBox 'Le controle combobox
Private m_dsEl As DataSet 'Dataset contenant les éléments (NoEl et DescEl) de la table élément
Private m_cboBinding As Binding 'L'objet Binding pour le combobox
Private m_DataSource As String

'Paramètres :
'
'cbo : Le controle ComboBox à binder
'dsEl : DataSel qui contient les éléments possibles
' il ne doit y avoir que les champs NoEl et DescEl
'dsToBind : Le dataset à binder avec le combobox
'DataSource : Le nom donné à la table dans dsEl ex : Element
'DataMember : Table.champ à binder ex : facturation.NoEl

Public Sub New(ByVal cbo As ComboBox, ByVal dsEl As DataSet, ByVal dsToBind As DataSet, ByVal DataSource As String, ByVal DataMember As String)
m_cboCtrl = cbo
m_dsEl = dsEl
m_DataSource = DataSource

m_cboCtrl.DataSource = m_dsEl.Tables(m_DataSource)
m_cboCtrl.DisplayMember = "DescEl"

m_cboBinding = New Binding("text", dsToBind, DataMember)
AddHandler m_cboBinding.Parse, AddressOf cboParse
AddHandler m_cboBinding.Format, AddressOf cboFormat
m_cboCtrl.DataBindings.Add(m_cboBinding)
End Sub

'Transfert les données du dataset ver le combobox
Private Sub cboFormat(ByVal sender As Object, ByVal e As ConvertEventArgs)
Dim i As Integer = 0
MessageBox.Show("sdasdasdasd")
While i <= m_dsEl.Tables(m_DataSource).Rows.Count - 1 AndAlso _
CInt(e.Value) <> CInt(m_dsEl.Tables(m_DataSource).Rows(i).Item("NoEl"))
i = i + 1
End While

If i = m_dsEl.Tables(m_DataSource).Rows.Count Then
e.Value = CStr(m_dsEl.Tables(m_DataSource).Rows(0).Item("DescEl"))
Else
e.Value = CStr(m_dsEl.Tables(m_DataSource).Rows(i).Item("DescEl"))
End If
End Sub

'Transfert les données du combobox vers le dataset
Private Sub cboParse(ByVal sender As Object, ByVal e As ConvertEventArgs)
Dim i As Integer = 0
MessageBox.Show(CStr(e.Value))
While i <= m_dsEl.Tables(m_DataSource).Rows.Count - 1 AndAlso _
CStr(e.Value) <> CStr(m_dsEl.Tables(m_DataSource).Rows(i).Item("DescEl"))
i = i + 1
End While

If i = m_dsEl.Tables(m_DataSource).Rows.Count Then
e.Value = CInt(m_dsEl.Tables(m_DataSource).Rows(0).Item("NoEl"))
Else
e.Value = CInt(m_dsEl.Tables(m_DataSource).Rows(i).Item("NoEl"))
End If
End Sub

'Débinder le combobox
Public Sub Clear()
m_cboCtrl.DataBindings.Clear()
End Sub

End Class

Bon voila pour le code.
Si mon comboBox est de type simple tout fonctionne à merveille et tout le monde est heureux ya plus de problèmme

Par contre si le comboBox est de type DropDown ou DropDownList le cboFormat fonctionne, mais pas le cboParse.
Donc le transfert du dataset ver le combobox se fait, mais pas l'inverse.

C'est quoi le problèmme sa me tu sa.
Si quelqu'un a la réponse ou à déjà eu ce problèmme j'aimerais bien des réponse S.V.P.

Merci pour l'aide et pour le temps
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
120
Date d'inscription
mardi 11 février 2003
Dernière intervention
9 mars 2008
3
Merci
Bonjour à tous
Oubliez tout ce que j'ai dit, tout est faux. je me suis tromper.
La vrai solution est bien plus simple.

on n'a pas besoin de modifier de lignes, on n'a qu'a mettre ces ligne pas besoin de la classe.

m_cboCtrl.DataSource = m_dsEl.Tables(m_DataSource)
m_cboCtrl.ValueMember = "NoEl"
m_cboCtrl.DisplayMember = "DescEl"
m_cboBinding = New Binding("SelectedValue", dsToBind, DataMember)

Voici seulement ces lignes dans votre code, mais modifier avec vos nom de variables et sa fait.

Désolé pour la perte de temps.

Dire « Merci » 3

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

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

Messages postés
120
Date d'inscription
mardi 11 février 2003
Dernière intervention
9 mars 2008
0
Merci
Bonjour à tous

J'ai trouver. voici les lignes de code à modifier :

m_cboCtrl.DataSource = m_dsEl.Tables(m_DataSource)
m_cboCtrl.ValueMember = "NoEl"
m_cboCtrl.DisplayMember = "DescEl"
m_cboBinding = New Binding("SelectedValue", dsToBind, DataMember)

Le tout fonctionne bien alors si quelqu'un à a faire la même chose la classe est prête.

J'aimerais quand même si quelqu'un connait un moyen plus performant qu'il m'en fasse part.

Merci.
Messages postés
22
Date d'inscription
samedi 18 janvier 2003
Dernière intervention
24 mai 2005
0
Merci
j'ai rien compris a ton programme

=======
JPeman
=======

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.