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

VB.NET Discussion :

Datagrid et combobox avec deux datasource différents


Sujet :

VB.NET

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2006
    Messages : 96
    Points : 71
    Points
    71
    Par défaut Datagrid et combobox avec deux datasource différents
    Bonjour,

    Je cherche à faire un datagrid d'une seule colonne. Cette colonne doit être de type DataGridViewComboBoxColumn.

    Le datagrid a une source de données qui lui est propre, à savoir un binding source.
    Mais la colonne DataGridViewComboBoxColumn doit avoir comme source de sa liste de données une toute autre liste. Exemple : pour un client mail style mozilla thunderbird, la liste des destinataire d'un mail est un datagrid qui a comme source de données la liste des detinataires du mail. Mais sa colonne qui est de type ComboBox à comme source de données la liste des contacts enregistrés dans le carnet d'adresse.

    Je veux ce fonctionnement pour mon appli, et je n'y arrive absolument pas.

    Merci d'avance pour votre aide.

    Renaud

  2. #2
    Membre confirmé
    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
    Points : 451
    Points
    451
    Par défaut
    Bonjour,
    un peu comme ceci
    le datagrid est relié un bindingsource
    le colonne combo peut être relié à un autre bindingsource ou à une table.
    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 ColCB as new datagridviewcomcoboxcolumn()
    me.dgv.autogeneratecolumns = false
    me.dgv.datasource = me.bindSource
    me.dgv.columns.clear
    colcb.name = "NomCol"
    colcb.headertext = "Titre"
    colcb.width = 150
    colcb.datapropertyname = "champtable"
    colcb.datasource = dataset.datatable (ou bindingsource)
    colcb.displaymember = "nomchamp"
    colcb.valuemember = "nomchamp"
    colcb.maxdropdownitems = 15
    dgv.add(colcb)
    Vérifie la syntaxe car je n'ai pas testé.
    Bon boulot
    Jean

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2006
    Messages : 96
    Points : 71
    Points
    71
    Par défaut
    Excusez moi de ne plus avoir suivie la conversation, nous avons eu des probleme s au travail, je n'ais plus pu m'y penché.

    Alors c'est effectivement ce que j'ai fait, mais pas moyen !!
    Mais en le probléme doit rééllement être de mon coté parce que je me rend compte que je n'arrive pas du tout à implémenté une combo box liée à des données dans un champs d'un datagridview.

    Si quelqu'un à une autre idée ...

  4. #4
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    le code de JPelli devrait répondre à ton probléme à vue de nez.

    Peux-tu poster ton code pour voir plus clair sur le probléme ?

    Cdt

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2006
    Messages : 96
    Points : 71
    Points
    71
    Par défaut
    Bien sur

    Ca ressemble à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    me.datagridview.datasource = MaCollectionDObjetMetier1
    me.datagridview.maColCombo..datapropertyname = "NomDeLaPropriétéDeMaCollectionDObjetMetier1"
    me.datagridview.maColCombo.Datasource = MaCollectionDObjetMetier2
    me.datagridview.maColCombo.ValueMember = "NomDeLaPropriétéDeMaCollectionDObjetMetier2"
    me.datagridview.maColCombo.DisplayMember = "NomDeLaPropriétéDeMaCollectionDObjetMetier2"
    Et invariablement, j'obtient un nombre incalculable d'erreur ...
    Je tien à dire que le même code sur une combobox classique fonctionne parfaitement ...

    Merci encore pour votre interet!

  6. #6
    Membre averti Avatar de Tdeny
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 287
    Points : 311
    Points
    311
    Par défaut
    Bonjour,

    Moi, je suis ici parce que je voudrais passer du javascript au vb, donc je connais pas, mais en tout cas, tu as 2 points .. ci dessous
    C'est une abréviation ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.datagridview.maColCombo..datapropertyname = "NomDeLaPropriétéDeMaCollectionDObjetMetier1"

  7. #7
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    Essayes de déclarer le DataSource APRES avoir déclarer les DisplayMember et ValueMember.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim c As New DataGridViewComboBoxColumn
    c.ValueMember = monDataSet.Tables(0).Columns(0).ColumnName
    c.DisplayMember = monDataSet.Tables(0).Columns(1).ColumnName
    c.DataSource = monDataSet.Tables(0)
    MyDataGridView.Columns.Add(c)
    Cdt.

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2006
    Messages : 96
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par Tdeny
    Bonjour,

    Moi, je suis ici parce que je voudrais passer du javascript au vb, donc je connais pas, mais en tout cas, tu as 2 points .. ci dessous
    C'est une abréviation ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.datagridview.maColCombo..datapropertyname = "NomDeLaPropriétéDeMaCollectionDObjetMetier1"
    Non pardon c'est juste une erreur de frappe

    Sinon j'ai essayé de déclarer le datasource aprés, et pas moyen, ca marche toujours pas ...
    Voila mon code actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim act As New DataGridViewComboBoxColumn()
    act.AutoComplete = True
    act.DisplayMember = "Name"
    act.ValueMember = "Name"
    act.DataPropertyName = "ActivityName"
    act.DataSource = m_ActionTypeCol
    Me.DataGridMulti.Columns.Add(act)

  9. #9
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    Que ce passe-t'il ? Tu as une exception ou la liste ne contient rien ?

    Que contient m_ActionTypeCol et c'est quoi (dataset, datatable ...) ? Les colonnes "Name" et "ActivityName" sont-ils présentes dans cette source de données ?

    Cdt.

  10. #10
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2006
    Messages : 96
    Points : 71
    Points
    71
    Par défaut
    Cela fonctionne enfin, mais je ne sais pas pourquoi, la liste est longue à s'afficher. Donc ce n'est peut être pas la solution idéale. De plus la valeur que je selectionne n'est pas affecté au champs... Ce que je trouve pour le moins bizard

    Citation Envoyé par olsimare
    Bonjour.

    Que ce passe-t'il ? Tu as une exception ou la liste ne contient rien ?

    Que contient m_ActionTypeCol et c'est quoi (dataset, datatable ...) ? Les colonnes "Name" et "ActivityName" sont-ils présentes dans cette source de données ?

    Cdt.
    m_ActionTypeCol est une classe metier (clsActionTypeCollection) que j'ai creer.
    En effet je découpe mon application en trois couches :
    - Accés aux données (dataset, et adapter)
    - Metier (objet de base du fonctionnement, collection)
    - Graphique (formulaire)

    Chaque couche n'a accés qu'à la couche inférieur (en clair Graphique n'accéde pas à Accés aux données), si bien que tout mes binding se font sur mes collection ou mes objets.
    Mes collections (comme clsActionTypeCollection) implémentent de IBindingList pour qu'elle puissent servir de source de données.

    En résumé m_ActionCol implémente un DataView en IBindingList et doit alimenter la DataGridViewComboBoxColumn.

    J'obtiens trés souvent le message suivant : valeur incorrect pour le champs

    J'espere avoir été compréhensible.
    Merci encore

    Renaud

Discussions similaires

  1. Combobox avec deux champs
    Par hajarussa dans le forum VB.NET
    Réponses: 6
    Dernier message: 02/10/2007, 10h11
  2. Etat avec deux sources différentes
    Par Pigwi dans le forum VBA Access
    Réponses: 4
    Dernier message: 07/06/2007, 09h43
  3. Ecrire dans une CEdit avec deux Couleurs Différentes
    Par yoyothebest dans le forum MFC
    Réponses: 1
    Dernier message: 25/03/2006, 19h09
  4. Réponses: 8
    Dernier message: 13/03/2006, 17h37
  5. [C#] tri datagrid et incohérence avec la DataSource
    Par chasis.fan dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/12/2005, 17h54

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