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
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.