C'est un controle personnaliser pour le DAO et access.
Vous lui passé un recordset en paramètre, lui dite quel champ il doit afficher
On peut lui dire d'afficher tel index de la base, tel index du combo, il renvoi toujours la valeur de la base et son index correspondant.
Enfin, le code est court et simple je pense.
Source / Exemple :
Imports dao
Public Class CboxData
Inherits System.Windows.Forms.ComboBox
#Region " Code généré par le Concepteur Windows Form "
Public Sub New()
MyBase.New()
'Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()
'Ajoutez une initialisation quelconque après l'appel InitializeComponent()
End Sub
'La méthode substituée Dispose du UserControl pour nettoyer la liste des composants.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Requis par le Concepteur Windows Form
Private components As System.ComponentModel.IContainer
'REMARQUE : la procédure suivante est requise par le Concepteur Windows Form
'Elle peut être modifiée en utilisant le Concepteur Windows Form.
'Ne la modifiez pas en utilisant l'éditeur de code.
Friend WithEvents ComboBox1 As System.Windows.Forms.ComboBox
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.ComboBox1 = New System.Windows.Forms.ComboBox
'
'ComboBox1
'
Me.ComboBox1.Location = New System.Drawing.Point(17, 17)
Me.ComboBox1.Name = "ComboBox1"
Me.ComboBox1.TabIndex = 0
Me.ComboBox1.Text = ""
End Sub
#End Region
#Region "Variables Privées"
Private m_table As Recordset
Private m_Champ As Integer = 0
Private m_ChampMax As Integer = 0
Private m_IndexBase As Integer = -1
Private m_cb As ComboBox
#End Region
#Region "Propriètès Publiques"
Public ReadOnly Property DataTable() As Recordset 'Table utilisée
Get
Return m_table
End Get
End Property
Public Property DataChampALister() As Integer 'Champs qui sera listé
Get
Return m_Champ
End Get
Set(ByVal Value As Integer)
If Value < 0 Then Value = 0
If Value > m_ChampMax Then Value = m_ChampMax
m_Champ = Value
End Set
End Property
Public ReadOnly Property DataIndex() As Integer 'Index dans la base du champ en cours
Get
Return m_IndexBase
End Get
End Property
#End Region
#Region "Methodes"
'Permet de charger la table (recordset) dans le combo (et le combo des index)
Public Sub DataLoad(ByVal DataTable As Recordset, ByVal DataChampALister As Integer)
If m_cb Is Nothing Then m_cb = New ComboBox 'Création d'un combo caché pour les index
m_table = DataTable
m_ChampMax = m_table.Fields.Count - 1
If DataChampALister < 0 Then m_Champ = 0
If DataChampALister > m_ChampMax Then m_Champ = m_ChampMax
m_Champ = DataChampALister
Me.Items.Clear()
m_cb.Items.Clear()
If m_table Is Nothing Then Exit Sub 'Si pas de table on sort
If m_table.RecordCount = 0 Then Exit Sub 'Si pas de données on sort
Try
With m_table
.MoveFirst()
Do While Not .EOF
Me.Items.Add(.Fields(m_Champ).Value) 'Met valeur
m_cb.Items.Add(.Fields(0).Value) 'Met index base (on suppose que c'est le champ 0
.MoveNext()
Loop
End With
Catch ex As Exception
End Try
End Sub
'Affiche valeur pour l'index de la base donné
Public Sub DataShow(ByVal DataIndex As Integer)
If DataIndex = -1 Then Me.Text = ""
If m_table Is Nothing Then Exit Sub
If m_cb Is Nothing Then Exit Sub
m_cb.Text = DataIndex.ToString
Me.SelectedIndex = m_cb.SelectedIndex
End Sub
#End Region
#Region "Suivi Selection"
'Surveille les changement du combodata pour mettre a jour l'index de la base
Private Sub CboxData_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.SelectedIndexChanged
Actualiser()
End Sub
Private Sub CboxData_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.SelectedValueChanged
Actualiser()
End Sub
Private Sub CboxData_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.TextChanged
Actualiser()
End Sub
Private Sub Actualiser()
On Error Resume Next
If m_cb Is Nothing Then Exit Sub
m_cb.SelectedIndex = Me.SelectedIndex
m_IndexBase = Val(m_cb.Text)
End Sub
#End Region
End Class
Conclusion :
Il s'agit d'un usercontrol basé sur un combobox et qui utilise la reference COM DAO
Donc à ajouter aux références de votre projet
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.