IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Accès aux données Discussion :

Affectation automatique de Champs dans un ComboBox


Sujet :

Accès aux données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Par défaut Affectation automatique de Champs dans un ComboBox
    Bonjour Forum,

    Bon le titre est peut être pas très claire mais voici ce que je veux faire mais je ne sais pas le faire en VB.NET:

    Voila je suis entrain de faire un formulaire de recherche multicritere.

    J'ai quatre combobox (CboTable, CboChampT1, CboChampT2 et CboChanpD)

    CboTable contient les noms des tables qui se trouvent dans ma base Access.
    Table1, Table2 et Table3.

    Ce que je voudrais c'est que qd je choisi la Table1 les nom des Champs de cette table soit automatiquement mis dans les CboChampT1, CboChampT2 et CboChampT3. Et idem si je choisi Table2 ou Table3.

    Je sais le faire en VBA mais pas du tout en VB.Net et je ne trouve rien sur Internet.

    Voici le code en VBA si ça peut aider quelqu un a me le convertir en VB.Net:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        Me.CboChampT1.RowSource = Me.CboTable.Value
        Me.CboChampT1.Requery
     
        Me.CboChampT2.RowSource = Me.CboTable.Value
        Me.cCboChampT2.Requery
     
        Me.CboChampD.RowSource = Me.CboTable.Value
        Me.CboChampDr.Requery
    Si quelqu'un avait la méthode pour faire ce que je veux...

    Merci d'avance

    Cordialement,
    Vincent

  2. #2
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 182
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 182
    Par défaut
    Bonjour.

    Je fais ça avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    '
    ' chargement du schema de la table source
    '
    Dim dtSchemaTable As DataTable = _
    LaConnection.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Indexes, _
    New Object() {Nothing, Nothing, Nothing, _
    Nothing, LeNomDeLaTable})
    Et tu récupéres une datatable contenant l'ensemble des colonnes.

    Cdt.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Par défaut
    Salut Olsimare, le Forum

    Merci pour ta réponse, mais qu'est ce que je mets après?

    Alors j'ai testé avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim dtSchemaTable As DataTable = connAccess.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Indexes, New Object() {Nothing, Nothing, Nothing, Nothing, "Project"})
    Me.CboChampT1.DataSource = dtSchemaTable
    Me.CboChampT2.DataSource = dtSchemaTable 
    Me.CboChampD.DataSource = dtSchemaTable
    Mais ça me met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Data.DataRowView
    deux fois par combobox.

    Comment je récupère les noms de mes champs (qui sont les en tetes de mes colonnes des Tables Access)? Je suis dans l'obscurité la plus totale...

    Quelqu'un peut il m'éclairer?

    Merci d'avance

    Cordialement,
    Vincent

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Par défaut
    Bonjour,
    Ajoute DisplayMember : nom du champ de la table à afficher dans le combo
    valueMember : nom du champ de la table ayant la valeur réelle à utiliser.
    par exemple la valeur réelle(Valuemember) serait la clé de l'enregistrement et DisplayMember serait le libellé.
    La propriété DisplayMember n'est pas obligatoire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CboChampT1.DisplayMember = "Libellé"
        CboChampT1.ValueMember = "Clé"
    Bon boulot Jean

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Par défaut
    Salut JPelli, le Forum

    Merci de m'avoir répondu mais je crains que je ne t'ai pas très bien compris...

    Voila ce que j'ai compris (enfin je crois!!!!!):

    Le DisplayMember = Contient les Noms des champs des colonne de la DataTable
    Par exemple: Colonne1, Colonne2 etc...

    Le valueMember = Le Nom du Champs

    Si c'est ça :
    Ces deux propriétés vont donc avoir la même valeur...

    A savoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            Dim dtSchemaTable As DataTable = connAccess.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Indexes, New Object() {Nothing, Nothing, Nothing, Nothing, "Project"})
     
            cboTField1.DataSource = dtSchemaTable
            cboTField1.DisplayMember = "Department"
            cboTField1.ValueMember = "Department"
     
            cboTField2.DataSource = dtSchemaTable
            cboTField2.DisplayMember = "Department"
            cboTField2.ValueMember = "Department"
     
            cboDField.DataSource = dtSchemaTable
            cboDField.DisplayMember = "Department"
            cboDField.ValueMember = "Department"
    Mais qd je lance l'application ca bug et j'ai comme message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cannot bind to the new display member. Parameter name: newDisplayMember
    ?????
    Donc ca veut dire que j'ai pas trop pigé le truc!!!

    après je suis tombe sur un site qui disait de mettre ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            Dim dtSchemaTable As DataTable = connAccess.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Indexes, New Object() {Nothing, Nothing, Nothing, Nothing, "Project"})
     
            cboTField1.DisplayMember = "Department"
            cboTField1.ValueMember = "Department"
            cboTField1.DataSource = dtSchemaTable
     
            cboTField2.DisplayMember = "Department"
            cboTField2.ValueMember = "Department"
            cboTField2.DataSource = dtSchemaTable
     
            cboDField.DisplayMember = "Department"
            cboDField.ValueMember = "Department"
            cboDField.DataSource = dtSchemaTable
    Et la plus de message d'erreur mais le meme pb qu'avant a savoir j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Data.DataRowView
    Dans mes comboBox!!!!

    Donc confusion totale et je me

    Est ce que tu aurais une solution a mon pb?

    Merci d'avance

    Vincent

  6. #6
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 182
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 182
    Par défaut
    Bonjour.

    Le conseil du jour : tu te mets en debug et tu regardes ce qu'il y a dans la dtSchemaTable, tu vas comprendre toute suite.

    C'est une datatable qui contient par ligne les colonnes de la table donnée dans le GetOleDbSchemaTable.

    Comme pour toute datatable, chaque colonne de dtSchemaTable a un nom. Par exemple, tu as une colonne "COLUMN_NAME" qui doit être ce que tu cherches.

    Donc dans le displaymember et valuemember c'est "COLUMN_NAME" qu'il faut mettre (si j'ai bien compris ton soucis).

    PS : displaymember c'est ce qui est affiché et valuemember c'est la valeur réelle (interne) du combo qui est potentiellement bindée.

    Cdt.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Par défaut
    Salut olsimare, le Forum,

    Super ton tuto sur les combobox multi-colonnes.

    Je pense que je vais m'en servir très prochainement car j'y ai vu des trucs qui me seront utiles

    Merci pour tout

    Cordialement,
    Vincent

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Affecter automatiquement une valeur dans un champs
    Par Hervé40 dans le forum Modélisation
    Réponses: 2
    Dernier message: 01/12/2009, 14h12
  2. Réponses: 4
    Dernier message: 05/10/2008, 19h10
  3. Remplir automatiquement un champ dans une table
    Par en_stage dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 03/08/2006, 20h57
  4. [Sql]affectation d'un champ dans select
    Par boulaxx dans le forum Oracle
    Réponses: 1
    Dernier message: 03/08/2006, 15h55
  5. modification automatique de champs dans une requete
    Par toinish dans le forum Access
    Réponses: 2
    Dernier message: 27/04/2006, 16h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo