Combodata acces - liste un champ et donne son index dans la base

Contenu du snippet

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

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.