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 Presentation Foundation Discussion :

Probleme affichage comboBox dans un listView


Sujet :

Windows Presentation Foundation

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Probleme affichage comboBox dans un listView
    Bonjour,
    J'utilise VS2008 - C#
    J'ai creé un listView avec 2 colonnes
    La première colonne est un Combobox et le 2ème est un TextBox.
    Dans la première colonne je dois sélectionner un produit dans une liste déroulante. Dans la 2eme colonne j'aimerai vouloir éditer dans le textBox.
    Mon code ne marche pas. Je n'arrive pas afficher le contenu des colonnes. Il m'affiche que les headers.
    Voici mon code :
    Côté xaml :
    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
     
     <UserControl.Resources>
            <ResourceDictionary>
                <ObjectDataProvider x:Key="odpClasseProduit"/>
                <ObjectDataProvider x:Key="odpProduit"/>
            </ResourceDictionary>
        </UserControl.Resources>   
     
        <Grid>
            <Border Height="28" Name="menu" VerticalAlignment="Top" BorderThickness="1" />
            <ListView Name="lvProduit" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Source={StaticResource odpClasseProduit}}" Margin="0,26,0,0">
                <ListView.Resources>
                    <DataTemplate x:Key="comboProduit">
                        <ComboBox Width="Auto" Height="Auto" ItemsSource="{Binding Source={StaticResource odpProduit}}" DisplayMemberPath="LibelleProduit"/>
                    </DataTemplate>
                    <DataTemplate x:Key="quantite">
                        <TextBox BorderThickness="1" Width="Auto" Height="Auto" />
                    </DataTemplate>                
                </ListView.Resources>
     
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="Produits" Width="190" CellTemplate="{StaticResource comboProduit}"/>                                           
                        <GridViewColumn Header="Quantite" Width="190" CellTemplate="{StaticResource quantite}"/>
                    </GridView>
                </ListView.View>
            </ListView>        
        </Grid>
    Code behind:
    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
     
    public partial class ClasseProduitControl : UserControl
        {
     
           #region Membres
     
            private ObjectDataProvider odpClasseProduit = null;
            private ObjectDataProvider odpProduit = null;
            private ObservableCollection<string> libelleProduit = null;
     
            #endregion 
     
     
            public ObservableCollection<string> LibelleProduit
            {
                get { return libelleProduit; }
                set { libelleProduit = value; }
            }
     
            public ClasseProduitControl()
            {
                InitializeComponent();
     
                libelleProduit = new ObservableCollection<string>();
                libelleProduit.Add("produit1");
                libelleProduit.Add("produit2");
     
                odpClasseProduit = (ObjectDataProvider)this.FindResource("odpClasseProduit"); 
                odpProduit = (ObjectDataProvider)this.FindResource("odpProduit"); 
                if (odpProduit != null)
                {
                    odpProduit.ObjectInstance = LibelleProduit;
                }          
            }       
        }
    J'aimerais que mon combobox s'affiche et que je vais pouvoir éditer dans le TextBox.
    Aidez-moi svp
    Merci

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    En débuggant, tu arrives à voir si odpProduit.ObjectInstance est null ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Ce n'est pas null.
    Il me retourne les 2 objets.

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Essaye en enlevant les DisplayMemberPath de ton code XAML

  5. #5
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Le problème ne vient-il pas du fait que odpClasseProduit est vide (enfin si on voit tous le code...)

    Moi je le remplirai comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
          List<ClasseProduit> lstClassProduit = new List<ClasseProduit>();
          lstClassProduit.Add( new ClasseProduit( "produit1", "223" ) );
          lstClassProduit.Add( new ClasseProduit( "produit2", "55" ) );
     
          odpClasseProduit = (ObjectDataProvider)this.FindResource( "odpClasseProduit" );
          if( odpClasseProduit != null ) {
            odpClasseProduit.ObjectInstance = lstClassProduit;
          }
    où ClasseProduit est une classe du type :
    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
      public class ClasseProduit {
     
        public string Produit {
          get;
          set;
        }
     
        public string Quantite {
          get;
          set;
        }
     
        public ClasseProduit( string prod, string qt ) {
          Produit = prod;
          Quantite = qt;
        }
      }
    Ensuite, c'est vrai que je ne mettrai pas DisplayMemberPath mais plutôt SelectedValue, ce qui donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <ComboBox Width="100" Height="Auto" ItemsSource="{Binding Source={StaticResource odpProduit}}" SelectedValue="{Binding Path=Produit}" />
    Et tu peux ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Text="{Binding Path=Quantite}"
    pour le TextBox si tu veux qu'il y ait un texte par défaut

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par binoo Voir le message
    Le problème ne vient-il pas du fait que odpClasseProduit est vide
    Etant donné qu'il affecte la propriété ObjectInstance, je ne pense pas que le pb vienne de là mais bon, faut tester.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Ca n'a rien changé.
    C'est toujours la même affichage, "les headers".

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Je l'ai trouvé. C'était un probleme de la recuperation des donées.
    Je vous remercie quand même.

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Citation Envoyé par Thomas Lebrun
    Etant donné qu'il affecte la propriété ObjectInstance, je ne pense pas que le pb vienne de là mais bon, faut tester.
    Il affecte cette propriété pour odpProduit (qui est utilisé pour le comboBox) mais pas à odpClasseProduit (qui est utilisé pour la listView).


    Sinon le code suivant marche chez moi. C'est pas un userControl pour mon exemple ).
    Code c# : 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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
      public partial class Window1 : Window {
     
        #region Membres
     
        private ObjectDataProvider odpClasseProduit = null;
        private ObjectDataProvider odpProduit = null;
        private ObservableCollection<string> libelleProduit = null;
     
        #endregion
     
        public ObservableCollection<string> LibelleProduit {
          get { return libelleProduit; }
          set { libelleProduit = value; }
        }
     
        public Window1() {
          InitializeComponent();
     
          libelleProduit = new ObservableCollection<string>();
          libelleProduit.Add( "produit1" );
          libelleProduit.Add( "produit2" );
     
          odpProduit = (ObjectDataProvider)this.FindResource( "odpProduit" );
          if( odpProduit != null ) {
            odpProduit.ObjectInstance = LibelleProduit;
          }
     
     
          List<ClasseProduit> lstClassProduit = new List<ClasseProduit>();
          lstClassProduit.Add( new ClasseProduit( "produit1", "223" ) );
          lstClassProduit.Add( new ClasseProduit( "produit2", "55" ) );
     
          odpClasseProduit = (ObjectDataProvider)this.FindResource( "odpClasseProduit" );
          if( odpClasseProduit != null ) {
            odpClasseProduit.ObjectInstance = lstClassProduit;
          }
     
        }
     
      }
     
      public class ClasseProduit {
     
        public string Produit {
          get;
          set;
        }
     
        public string Quantite {
          get;
          set;
        }
     
        public ClasseProduit( string prod, string qt ) {
          Produit = prod;
          Quantite = qt;
        }
      }

    Code xml : 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
    <Window 
      x:Class="WpfApplication3.Window1"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      Title="Window1" Height="300" Width="300"
      >
     
      <Window.Resources>
        <ResourceDictionary>
          <ObjectDataProvider x:Key="odpClasseProduit" />
          <ObjectDataProvider x:Key="odpProduit"/>
        </ResourceDictionary>
      </Window.Resources>
     
      <Grid>
        <Border Height="28" Name="menu" VerticalAlignment="Top" BorderThickness="1" />
        <ListView Name="lvProduit" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Source={StaticResource odpClasseProduit}}" Margin="0,26,0,0">
          <ListView.Resources>
            <DataTemplate x:Key="comboProduit">
              <ComboBox Width="100" Height="Auto" ItemsSource="{Binding Source={StaticResource odpProduit}}" SelectedValue="{Binding Path=Produit}" />
            </DataTemplate>
            <DataTemplate x:Key="quantite">
              <TextBox BorderThickness="1" Width="100" Height="Auto" Text="{Binding Path=Quantite}" />
            </DataTemplate>
          </ListView.Resources>
     
          <ListView.View>
            <GridView>
              <GridViewColumn Header="Produits" Width="190" CellTemplate="{StaticResource comboProduit}"/>
              <GridViewColumn Header="Quantite" Width="190" CellTemplate="{StaticResource quantite}"/>
            </GridView>
          </ListView.View>
        </ListView>
      </Grid>
    </Window>
    Ça donne l'aperçu en pièce jointe.


    [EDIT] Trop tard...
    Images attachées Images attachées  

  10. #10
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par binoo Voir le message
    Il affecte cette propriété pour odpProduit (qui est utilisé pour le comboBox) mais pas à odpClasseProduit (qui est utilisé pour la listView).
    Ah oui, bien vu

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

Discussions similaires

  1. Probleme affichage image dans picturebox
    Par Julien1987 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 24/01/2007, 14h16
  2. probleme affichage combobox item selectionne
    Par nicocotiers dans le forum Flash
    Réponses: 5
    Dernier message: 16/10/2006, 11h36
  3. Probleme de Selection dans un ListView
    Par bixi dans le forum Delphi
    Réponses: 1
    Dernier message: 04/06/2006, 00h40
  4. [C#] Probleme de couleur dans une ListView
    Par Oberown dans le forum Windows Forms
    Réponses: 1
    Dernier message: 05/12/2005, 17h39
  5. []probleme affichage valeur dans combobox
    Par gup dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 23/09/2005, 09h22

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