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

Windows Mobile .NET Discussion :

VB.Net 2008 Express ComboBox qui cache une colonne sur deux.


Sujet :

Windows Mobile .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien en numérisation
    Inscrit en
    Juillet 2002
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien en numérisation

    Informations forums :
    Inscription : Juillet 2002
    Messages : 338
    Par défaut VB.Net 2008 Express ComboBox qui cache une colonne sur deux.
    Bonjour.

    Dans un programme il y a deux combobox.... Je les remplis avec de l'information venant d'une BD Access. J'affiche dans l'un le nom des employés et dans le deuxieme les noms officiels des projets dans l'entreprise.

    Je fais la commande suivante pour ajouter l'infos dans le combo box :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me.Cmb_Projet.Items.Add(enumerate.Item("titre_projet").ToString())

    Là ou je me casse la tête c'est que je dois enregistrer le no du projet dans une table. Donc lorsque l'usager va choisir le projet "ABC", la valeur 1 qui équivaut a "ABC" doit s'enregistrer dans la table.

    Comment je fais lors de l'insertion des projets dans le combo box l'insertion du no du projet sans qu'il soit affiché ?!?!??! Si c'est possible il y a juste à aller chercher cette valeur lors du choix de l'usager et je pourrai faire l'insertion ou l'update dans la BD avec le no du projet au lieu du nom complet du projet.

    Sinon comment faire alors pour trouver le no du projet sans faire de requête de recherche dans la table projets? Car cette méthode alourdirait le traitement.

    Merci de vos idées et conseils

    AngelEvil!

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Le problème, c'est qu'en remplissant "manuellement" ta ComboBox avec des chaines de caractères, tu perds le lien entre l'élément de la ComboBox et l'objet qu'il représente.

    Il faut que tu utilises le binding de données :
    - mets ta DataTable (ou une liste d'objets) en DataSource de la ComboBox
    - indique dans la propriété DisplayMember le nom de la colonne (ou la propriété) à afficher
    - indique dans ValueMember le nom de la colonne (ou la propriété) qui sert d'identifiant.

    Comme ça, la propriété SelectedValue te renvoie l'id de l'objet sélectionné, et SelectedItem renvoie l'objet lui-même. Si tu as besoin d'ajouter quelque chose à la liste, tu l'ajoutes dans la source de données, et ça l'ajoutera automatiquement au ComboBox.

  3. #3
    Membre éclairé
    Homme Profil pro
    Technicien en numérisation
    Inscrit en
    Juillet 2002
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien en numérisation

    Informations forums :
    Inscription : Juillet 2002
    Messages : 338
    Par défaut
    donc si je comprends bien je dois faire du ado.net mode non connecté pour arriver à ce que vous me dites....

    avec un dataset, dataadapter et le fill de la table pour mettre cela en mémoire puis après connecter le combobox avec cela ?

    genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
             mode non connecté
            Dim strCon$ = CStr("provider=microsoft.jet.oledb.4.0;" & "data source= " & Chemin_Acces_BD & "\" & "BDAccess.mdb;")
            Dim total As Integer
            Cn = New OleDb.OleDbConnection(strCon)
            Cn.ConnectionString = strCon
            Cn.Open()
            CmdR = Cn.CreateCommand() 'Creation de commande
            CmdR.CommandText = "select id' projet, titre_projet from Projets"
     
            ' code mode non connecté
            DtSet = New DataSet
            DtAdapteur = New OleDb.OleDbDataAdapter
            DtAdapteur.SelectCommand = CmdR
            DtAdapteur.Fill(DtSet, "projets")
            IEnum = DtSet.Tables("projets").Rows.GetEnumerator
            total = DtSet.Tables("projets").Rows.Count
     
            ' verifie total enregistrement dans la table projet
     
            If total <> 0 Then
                Me.ChkLstBx_Choix_Projets.Items.Clear()
     
     
                '' ICI je mettrais le code pour connecter le combobox ????
     
                ''Dim i As Integer = 0
                ''Do While IEnum.MoveNext()
                ''    Me.ChkLstBx_Choix_Projets.Items.Insert(i, IEnum.Current(0))
                ''    i = i + 1
                ''Loop
     
                Cn.Close()
                cn = nothing
                CmdR.close()
                CmdR = nothing
     
            Else
                MsgBox("Problème avec l'accès à la table de la liste des projets ou vérifiez s'il y a des projets dans la table PROJETS!", MsgBoxStyle.Exclamation)
                Cn.Close()
                cn = nothing
                CmdR.close()
                CmdR = nothing
     
            End If

    Voila du code que je comprends lol Pour la connexion du combobox et la bd en mode programmation je devrai fouiller un peu, mais avec l'Aide de connection je ne prends pas ca. La BD doit etre mobile sur le serveur pour des raisons que je ne connais pas.

    En passant lorque des utilisateurs se connectent sur une BD Access est-ce c'est l'enregistrement qui est protégé des autres utilisateurs ou c'est la BD entière ????

    Merci!

    AngelEvil

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par angelevil Voir le message
    donc si je comprends bien je dois faire du ado.net mode non connecté pour arriver à ce que vous me dites....
    Pas forcément. On est pas obligé d'utiliser un DataSet, une liste d'objets fonctionne aussi. Mais l'avantage du DataSet est qu'il fournit des notifications en cas de changement, qui sont utilisées pour mettre à jour le contrôle bindé (ComboBox ou autre).

    Pour faire le binding, le plus simple est de passer par le designer, qui te permet de sélectionner la DataTable (ou le type d'objet), le champ à afficher et celui à utiliser comme clé.

    Citation Envoyé par angelevil Voir le message
    En passant lorque des utilisateurs se connectent sur une BD Access est-ce c'est l'enregistrement qui est protégé des autres utilisateurs ou c'est la BD entière ????
    Aucune idée... j'ai décidé depuis longtemps qu'Access était une sombre m***e et je ne m'en sers jamais

  5. #5
    Membre éclairé
    Homme Profil pro
    Technicien en numérisation
    Inscrit en
    Juillet 2002
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien en numérisation

    Informations forums :
    Inscription : Juillet 2002
    Messages : 338
    Par défaut
    Ouin.... donc si je ne peux pas prendre le designer parce que la BD access peut être déplacé n'importe où sur le serveur il me reste à le coder.

    Ca me donne le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                Dtset = New DataSet
                DtAdapteur = New OleDb.OleDbDataAdapter
                DtAdapteur.SelectCommand = CmdR
                DtAdapteur.Fill(Dtset, "Usagers")
                Me.Cmb_Usagers.DataSource = Dtset.Tables("Usagers")
                Me.Cmb_Usagers.DisplayMember = "Usager"

    ça affiche correctement le nom de l'usager, mais reste la gestion de l'ID de l'usager par rapport à la table, soit la clé primaire.

    J'ai regardé les propriété pour le combobox et je vois juste selectedIndex. Mais cette valeur est l'index dans le combobox et non la valeur de la clé primaire.

    Avez-vous une idée de quelle propriété que je dois utiliser ????


    Pour Access je vous comprends mais la compagnie aime mieux une BD facile à déplacer que tout le tralala avec une SQL Server Express.

    Merci

    AngelEvil!

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par angelevil Voir le message
    Ouin.... donc si je ne peux pas prendre le designer parce que la BD access peut être déplacé n'importe où sur le serveur il me reste à le coder.
    Et alors ? C'est juste une chaine de connexion à modifier dans le app.config...

    Citation Envoyé par angelevil Voir le message
    ça affiche correctement le nom de l'usager, mais reste la gestion de l'ID de l'usager par rapport à la table, soit la clé primaire.

    J'ai regardé les propriété pour le combobox et je vois juste selectedIndex. Mais cette valeur est l'index dans le combobox et non la valeur de la clé primaire.

    Avez-vous une idée de quelle propriété que je dois utiliser ????
    Citation Envoyé par tomlev Voir le message
    - indique dans ValueMember le nom de la colonne (ou la propriété) qui sert d'identifiant.

    Citation Envoyé par angelevil Voir le message
    Pour Access je vous comprends mais la compagnie aime mieux une BD facile à déplacer que tout le tralala avec une SQL Server Express.
    SQLite
    C'est supporté sur tous les OS, c'est rapide, ça offre plus de fonctionnalités qu'Access, et le provider ADO.NET pèse 800ko tout mouillé (moteur natif inclus) et implémente Linq to Entities !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/10/2011, 10h14
  2. Pb de requête qui marche une fois sur deux
    Par emulamateur dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 26/04/2011, 16h45
  3. NamedQuery qui marche une fois sur deux
    Par Damascus06 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 06/12/2010, 15h41
  4. getElementById qui retourne "" une fois sur deux
    Par Cronycs dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/05/2007, 17h33
  5. Pb : malloc qui marche une fois sur deux .... ?
    Par guillaume_pfr dans le forum C
    Réponses: 14
    Dernier message: 21/07/2003, 09h52

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