Binding combobox nothing

Contenu du snippet

Bonjour,

Dans le cadre d'une application
Si vous avez le code suivant:

Combobox.datasource= DataTable
Combobox.DataMembre= "Désignation"
Combobox.ValueMembrer=NumId
Combobox.databindings.add("SelectValue",BindingSource,"NumIdParent")

et que vous êtes embêter par le fait que une fois, que vous avez fait choisi et validé une valeur dans la liste deroulante.
vous ne pouvez plus afficher une valeur vide dans le combobox

j'ai fait une classe 'amaComboBox' heritant de combobox qui contourne le probleme
à Utiliser comme suit:

With AmaComboBox1
.AmaDataBindingsMembre = "NumIDSociété"
.AmaDataBindingsSource = ContactBindingSource

.AmaDataMembrerName = "Désignation"
.AmaDataMembrerNumId = "NumId" 'Clé primaire
.AmaDataSource = m_dtSociete
End With
P.S Important: Faire en sorte que la propriété "AutoIncrementSeed" du champs "NumId" de la table société commence à 1 et non à 0

à votre disposition pour de plus amples renseignement, ou pur la réalisation d'un projet exemple

Cordialement
Amazing

Source / Exemple :


Imports System.Windows.Forms
Public Class AmaComboBox
   Inherits ComboBox
   Dim WithEvents m_bBinding As Binding

   Dim m_AmaDataSource As Data.DataTable 'Table 
   Public Property AmaDataSource As Data.DataTable 'base de donnée à faire afficher dans la liste déroulante
      Get
         Return m_AmaDataSource

      End Get
      Set(ByVal value As Data.DataTable)
         m_AmaDataSource = value

      End Set
   End Property

   Public m_AmaDataMembrerName As String = "Name" 'Champs de la base de donnée à afficher dans la liste déroulante
   Public Property AmaDataMembrerName As String
      Get
         Return m_AmaDataMembrerName
      End Get
      Set(ByVal value As String)
         m_AmaDataMembrerName = value
      End Set
   End Property

   Public m_AmaDataMembrerNumId As String = "NumId" 
   Public Property AmaDataMembrerNumId As String 'Champs de la base de donnée à envoyer à la bindingsource
      Get 
         Return m_AmaDataMembrerNumId
      End Get
      Set(ByVal value As String)
         m_AmaDataMembrerNumId = value
      End Set
   End Property

   Public m_AmaDataBindingsSource As BindingSource
   Public Property AmaDataBindingsSource As BindingSource 'BindinsSource 
      Get
         Return m_AmaDataBindingsSource
      End Get
      Set(ByVal value As BindingSource)
         m_AmaDataBindingsSource = value
         If IsNothing(value) = False Then
            m_bBinding = New Binding("Text", m_AmaDataBindingsSource, m_AmaDataBindingsMembre)
            Me.DataBindings.Add(m_bBinding)
         End If
      End Set
   End Property

   Dim m_AmaDataBindingsMembre As String = "NumIdSociété"
   Public Property AmaDataBindingsMembre As String 'Champs de la bindingsource à faire afficher
      Get
         Return m_AmaDataBindingsMembre

      End Get
      Set(ByVal value As String)
         m_AmaDataBindingsMembre = value
      End Set
   End Property

   Dim m_NullValue As String = "<Aucun>"
   Public Property NullValue As String 'Valeur à afficher en cas de champs null
      Get
         Return m_NullValue
      End Get
      Set(ByVal value As String)
         m_NullValue = value
      End Set
   End Property

   Private Sub m_bBindingArcNarratif_Format(ByVal sender As Object, ByVal e As System.Windows.Forms.ConvertEventArgs) Handles m_bBinding.Format
      Select Case CInt(e.Value)
         Case Is = 0
            e.Value = m_NullValue

         Case Else
            Dim Rowview As DataRow() = m_AmaDataSource.Select(m_AmaDataMembrerNumId & "= '" & e.Value.ToString & "'")
            If Rowview.Length = 0 Then
               e.Value = m_NullValue
            Else
               e.Value = Rowview(0).Item(m_AmaDataMembrerName)
            End If

      End Select
         
   End Sub

   Private Sub m_bBindingArcNarratif_Parse(ByVal sender As Object, ByVal e As System.Windows.Forms.ConvertEventArgs) Handles m_bBinding.Parse
      Dim Rowview As DataRow() = m_AmaDataSource.Select(m_AmaDataMembrerName & "= '" & e.Value.ToString & "'")
      If Rowview.Length = 0 Then
         e.Value = 0
      Else
         e.Value = CInt(Rowview(0).Item(m_AmaDataMembrerNumId))
      End If

        End Sub

   Private Sub AmaComboBox_DropDown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.DropDown
      Me.Items.Clear()
      Dim dv As DataView = m_AmaDataSource.DefaultView
      dv.Sort = m_AmaDataMembrerName
      For x As Integer = 1 To dv.Count
         Me.Items.Add(dv.Item(x - 1).Row.Item(1))

      Next
   End Sub

   Private Sub AmaComboBox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
      If e.KeyCode = Keys.Delete Then
         Me.Text = m_NullValue

      End If

      If e.KeyCode = Keys.Back Then
         Me.Text = m_NullValue

      End If
      e.SuppressKeyPress = True

   End Sub

A voir également

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.