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 Forms Discussion :

[ComboBox]Pointer deux comboBox sur une table de données


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de mordrhim
    Inscrit en
    Avril 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2007
    Messages : 270
    Par défaut [ComboBox]Pointer deux comboBox sur une table de données
    Bonjour,


    Je souhaiterais, pour mon projet consistant en une saisie de rapport, pouvoir générer une liste de choix qui pourra être utilisée par plusieurs listes déroulantes.

    Je génère des lignes de production qui ont un numéro de lot. Ces différents numéros de lot doivent composer une liste de choix.
    Je générè ensuite une liste de pertes avec, pour chaque ligne, une liste déroulante sur les lots produits (cf image ci dessous)

    La liste se génère correctement mais lorsque je selectionne un lot dans les pertes, toutes les autres listes de choix du lot se positionnent sur le même lot.


    Pour générer la liste j'ai utilisé un dataTable que j'ai rempli et utilsé comme dataSource du comboBox. Le problème est, à mon avis que j'utilise donc une seule bindingSource pour tous les listes déroulantes (de choix de lot).

    Comment faire pour créer un tableAdapter d'une dataTable "temporaire", créée, remplie et gérée par Visual Studio ?
    Sinon, comment faire pour que puisse avoir deux listes comboBox pointant sur une même dataTable tout en dissociant les éléménts (que je puisse choisir des éléments différents avec les différentes comboBox)

  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
    Citation Envoyé par mordrhim Voir le message
    Sinon, comment faire pour que puisse avoir deux listes comboBox pointant sur une même dataTable tout en dissociant les éléménts (que je puisse choisir des éléments différents avec les différentes comboBox)
    Par défaut, quand tu définis une DataTable comme DataSource, il utilise en fait la vue par défaut de la DataTable (DefaultView). Donc si tu mets directement la table comme DataSource, toutes tes ComboBox utiliseront la même vue par défaut. Il faut donc définir explicitement une nouvelle vue pour chaque ComboBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    comboBox1.DataSource = New DataView(leDataSet.LaTable)
    comboBox2.DataSource = New DataView(leDataSet.LaTable)
    ...

  3. #3
    Membre chevronné Avatar de mordrhim
    Inscrit en
    Avril 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2007
    Messages : 270
    Par défaut
    Merci,

    je ne connaissais pas encore dataView. La solution fonctionne correctement excepté un comportement que je crois "normal" :
    Lorsque je rajoute un élément à la liste générée, les sélections actives des comboBox pointant sur cette liste se "réinitialisent", plaçant les éléments sélectionnés sur le premier de la liste.

    Exemple,
    ma liste générée est celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MAC_ID | MAC_NAME
    -----------------
       1   | MA01
       5   | MA05    '<- Je pointe sur celui-ci
       6   | MA06
    Je rajoute un élément (3,MA03), ce qui me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MAC_ID | MAC_NAME
    -----------------
       1   | MA01    '<- Après l'ajout la sélection se déplace, 
       5   | MA05    '   du coup je pointe sur celui-ci
       6   | MA06
       3   | MA03
    Existe-t-il un moyen de garder la sélection active ? Ou me faudra-t-il l'implémenter moi-même ?

  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
    Tu es sûr que la sélection était conservée avec une DataTable ? Parce qu'au final ça revient au même, vu que quand tu mets une DataTable comme DataSource, c'est en fait la DefaultView (qui est une DataView) qui est utilisée.
    Quel est ton code pour ajouter un élément ?

  5. #5
    Membre chevronné Avatar de mordrhim
    Inscrit en
    Avril 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2007
    Messages : 270
    Par défaut
    Oui,

    Lorsque j'utilisais la dataTable comme bindingSource, la sélection était conservée.

    Mon code pour ajouter un enregistrement est celui-ci :
    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
    Private tableLot As Entete_perte.TBL_LOTSDataTable = New Entete_perte.TBL_LOTSDataTable
     
    Private Sub AjouterEnregistrementMachine(ByVal maValue As String, ByVal monIndex As Integer)
        Dim maLigne() As DataRow
        maLigne = tableMachine.Select("TB_MACHINE_ID=" & monIndex)
        If maLigne.GetUpperBound(0) > 0 Then Throw New ArgumentException("Plusieurs Lignes pour l'identifiant " & monIndex)
        If maLigne.GetUpperBound(0) = 0 Then
            maLigne(0)(2) += 1  ' J'ajoute un compteur pour ne pas avoir de doublons et qui permet de savoir combien de fois l'enregistrement a été sélectionné
        Else
            Dim monTuple(2) As Object
            monTuple(0) = monIndex
            monTuple(1) = maValue
            monTuple(2) = 1
            tableMachine.BeginLoadData()
            tableMachine.LoadDataRow(monTuple, True)
            tableMachine.EndLoadData()
        End If
    End Sub

    EDIT : J'ai rajouté le code oublié :p

  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
    dans ce cas tu peux toujours sauvegarder l'élément sélectionné (SelectedValue ou SelectedItem) pour le restaurer après avoir ajouté un élément

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/10/2014, 11h19
  2. combobox en vb 2005 basé sur une table Access
    Par sergio114 dans le forum VB.NET
    Réponses: 0
    Dernier message: 19/10/2010, 11h28
  3. Réponses: 2
    Dernier message: 07/05/2010, 11h28
  4. [AC-2003] Créer un correcteur d'orthographe basé sur une table de données
    Par Miss Ti dans le forum VBA Access
    Réponses: 0
    Dernier message: 13/05/2009, 15h36
  5. Comment afficher deux champs d'une table dans une comboBox
    Par lamia2007 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 12/04/2007, 08h17

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