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_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
A voir également:
DataBinding ComboBox d'un champ de type entier avec vb.net et ado.net