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

C# Discussion :

Comment ajouter des éléments dans une ListView en mode Détail ? [Débutant]


Sujet :

C#

  1. #1
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 035
    Points
    7 035
    Par défaut Comment ajouter des éléments dans une ListView en mode Détail ?
    Comment ajouter des éléments dans une ListView en mode "Détail" ?

    Voici ce que je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                         ListViewItem Element = new ListViewItem(szFichier);
                         Element.SubItems.Add(szRepertoire);
                         Element.SubItems.Add("?");
                         ListView.Items.Add(Element);
    A l'exécution, quand la ListView se remplie, les en-têtes de colonne disparaissent, la barre de défilement verticale apparait (comme s'il y avait plein d'éléments dans la liste), mais la liste est vide (visuellement).
    Qu'est ce que j'ai raté ?
    (sachant qu'en mode "liste" ou "icône", je vois bien les éléments s'afficher; mais c'est le mode "détail" qui m'intéresse)

    En faisant une recherche je suis tombé sur ces liens (http://www.developpez.net/forums/d12...light=ListView, http://stackoverflow.com/questions/4...-2-3-and-4-etc), mais j'ai l'impression d'avoir fait pareil.


    Sinon, questions subsidiaires :
    - Comment récupérer la taille d'un fichier ?
    - Existe t'il une fonction qui complète un chemin Windows d'un "\" (si besoin) ?
    (l'équivalent du IncludePathDelimiter en Delphi / C++)

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 218
    Points : 28 180
    Points
    28 180
    Par défaut
    A priori ton code est bon. Tu dois avoir un soucis ailleurs!

  3. #3
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 035
    Points
    7 035
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    A priori ton code est bon. Tu dois avoir un soucis ailleurs!
    Ah. Et, qu'est ce que je pourais regarder ?

    Voici le code de conception (généré automatiquement):
    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
             // 
             // ListView
             // 
             this.ListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
                | System.Windows.Forms.AnchorStyles.Left) 
                | System.Windows.Forms.AnchorStyles.Right)));
             this.ListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
                                                                                       this.columnHeader1,
                                                                                       this.columnHeader2,
                                                                                       this.columnHeader3});
             this.ListView.FullRowSelect = true;
             this.ListView.Location = new System.Drawing.Point(305, 0);
             this.ListView.MultiSelect = false;
             this.ListView.Name = "ListView";
             this.ListView.Size = new System.Drawing.Size(607, 650);
             this.ListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
             this.ListView.TabIndex = 1;
             this.ListView.View = System.Windows.Forms.View.Details;
             // 
             // columnHeader1
             // 
             this.columnHeader1.Text = "Nom";
             this.columnHeader1.Width = 250;
             // 
             // columnHeader2
             // 
             this.columnHeader2.Text = "Répertoire";
             this.columnHeader2.Width = 250;
             // 
             // columnHeader3
             // 
             this.columnHeader3.Text = "Taille";
             this.columnHeader3.Width = 80;

  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 : 42
    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
    Points : 39 754
    Points
    39 754
    Par défaut
    Tu n'aurais pas fait un ListView.Clear quelque part ? Parce que ça supprime les lignes et les colonnes...

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 218
    Points : 28 180
    Points
    28 180
    Par défaut
    Pas mieux. Parce que ce code là aussi me semble correct.

  6. #6
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Je ne vois rien d'anormal non plus j'ai fais rapidement le test suivant :

    Code généré par le designer :

    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
     
                // 
                // listView1
                // 
                this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
                this.columnHeader1,
                this.columnHeader2});
                this.listView1.Location = new System.Drawing.Point(55, 61);
                this.listView1.Name = "listView1";
                this.listView1.Size = new System.Drawing.Size(178, 97);
                this.listView1.TabIndex = 0;
                this.listView1.UseCompatibleStateImageBehavior = false;
                this.listView1.View = System.Windows.Forms.View.Details;
                // 
                // columnHeader1
                // 
                this.columnHeader1.Text = "Nom";
                // 
                // columnHeader2
                // 
                this.columnHeader2.Text = "Prénom";
    Code dans un bouton pour l'ajout d'une ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            private void button1_Click(object sender, EventArgs e)
            {
                ListViewItem Element = new ListViewItem("Nom 1");
                Element.SubItems.Add("Prénom");
                listView1.Items.Add(Element);
            }
    Et tout fonctionne bien. Essaie peut être dans un projet test pour voir si tu as le même soucis et si oui poste nous le projet qu'on puisse l'analyser.

  7. #7
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Et voir ici pour récupérer la taille d'un fichier

  8. #8
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 035
    Points
    7 035
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Tu n'aurais pas fait un ListView.Clear quelque part ? Parce que ça supprime les lignes et les colonnes...
    Bien sûr, mais avant de remplir (pas après; où alors, il y a un truc qui m'échappe).

    Voici un peu plus de code (fortement inspiré d'une des sources de la FAQ):
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
          private void BtnRechercher_Click(object sender, System.EventArgs e)
          {
             // Si pas de critère.
             if(TextBoxMasque.Text.Length == 0)
             {
                MessageBox.Show(this, "Attention :  il faut saisir un critère de recherche !", this.Text + " - message", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                TextBoxMasque.Focus();
                return;
             }
     
             // Si pas de répertoire.
             if(TextBoxRepertoire.Text.Length == 0)
             {
                MessageBox.Show(this, "Attention :  il faut sélectionner un répertoire de recherche !", this.Text + " - message", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                TextBoxRepertoire.Focus();
                return;
             }
     
             BtnRechercher.Enabled = false;
             BtnAnnulerRecherche.Enabled = true;
             TextBoxMasque.Text = TextBoxMasque.Text.Trim();
             ListView.Clear();        // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
             _nNbFichier = 0;     _bRechercheAnnulee = false;
             StatusBarPanelNb.Text = "";
             StatusBarPanelTexte.Text = " Recherche en cours ...";
             try
             {
                // Recherche.
                _ThreadRecherche = new Thread(new ThreadStart(InitRecherche));
                _ThreadRecherche.Start();
             }
             finally
             {
                BtnRechercher.Enabled = true;
                BtnAnnulerRecherche.Enabled = false; 
                StatusBarPanelNb.Text = _nNbFichier.ToString();
                StatusBarPanelTexte.Text = (_bRechercheAnnulee ? " Recherche annulée." : " Recherche terminée.");
                ListView.Focus();
             }
          }
     
          private void InitRecherche()
          {
             // Recherche.
             _bRechercheEnCours = true;
             Recherche(TextBoxMasque.Text, TextBoxRepertoire.Text, TextBoxContenant.Text, CheckBoxSousRepertoires.Checked);
          }
     
          private void Recherche(string szMasque, string szRepertoire, string szValeur, bool bRechercheSousRepertoire)
          {
             // Initialisations.
             Regex Delimiteur = new Regex(",");
             String[] TypesFichiers = Delimiteur.Split(szMasque);
             if(TypesFichiers.Length == 0)
             {
                TypesFichiers = new String[1];
                TypesFichiers[0] = "";
             }
             for(int i = 0; i < TypesFichiers.Length; i++)
             {
                TypesFichiers[i] = TypesFichiers[i].Trim();
             }
     
             // Recherche.
             try
             {
                foreach(string szTypeFichier in TypesFichiers)
                {
                   foreach(string szFichier in Directory.GetFiles(szRepertoire, szTypeFichier))
                   {
                      // Si recherche dans fichier.
                      if((szValeur != "") && (!ValeurDansFichier(szFichier, szValeur)))
                         continue;
                      else
                      {
                         // Ajout élément.
                         ListViewItem Element = new ListViewItem(szFichier);
                         Element.SubItems.Add(szRepertoire);
                         Element.SubItems.Add("?");
                         ListView.Items.Add(Element);
                         _nNbFichier++;
                         StatusBarPanelNb.Text = _nNbFichier.ToString();
                      }
                   }
                }
             }
             catch(Exception)
             {
             }
     
             // Recherche dans les sous-répertoires.
             if(bRechercheSousRepertoire)
             {
                // Parcours des sous-répertoires.
                try
                {
                   foreach(string szSousRepertoire in Directory.GetDirectories(szRepertoire))
                   {
                      // Recherche dans le sous-répertoire.
                      Recherche(szMasque, szSousRepertoire + "\\", szValeur, bRechercheSousRepertoire);
                   }
                }
                catch(Exception)
                {
                }
             }
          }
    Citation Envoyé par infosam76 Voir le message
    Je ne vois rien d'anormal non plus j'ai fais rapidement le test suivant
    ...
    Et tout fonctionne bien. Essaie peut être dans un projet test pour voir si tu as le même soucis et si oui poste nous le projet qu'on puisse l'analyser.
    J'essai de tester ce soir.

    Citation Envoyé par infosam76 Voir le message
    Et voir ici pour récupérer la taille d'un fichier
    je teste aussi.

  9. #9
    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 : 42
    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
    Points : 39 754
    Points
    39 754
    Par défaut
    Citation Envoyé par Lung Voir le message
    Bien sûr, mais avant de remplir (pas après; où alors, il y a un truc qui m'échappe).
    Oui mais en faisant ça tu as supprimé toutes les colonnes, donc il n'y a rien à afficher dans la vue détails quand tu ajoutes les lignes. Pour supprimer les lignes sans supprimer les colonnes, il faut faire ListView.Items.Clear()

  10. #10
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Oui mais en faisant ça tu as supprimé toutes les colonnes, donc il n'y a rien à afficher dans la vue détails quand tu ajoutes les lignes. Pour supprimer les lignes sans supprimer les colonnes, il faut faire ListView.Items.Clear()
    Encore une fois bien vu l'aveugle ...

  11. #11
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 035
    Points
    7 035
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Oui mais en faisant ça tu as supprimé toutes les colonnes, donc il n'y a rien à afficher dans la vue détails quand tu ajoutes les lignes. Pour supprimer les lignes sans supprimer les colonnes, il faut faire ListView.Items.Clear()
    C'était bien ça.
    C'est fourbe !

    Citation Envoyé par infosam76 Voir le message
    Et voir ici pour récupérer la taille d'un fichier
    Ca marche.


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

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/01/2009, 17h32
  2. Réponses: 8
    Dernier message: 01/03/2008, 13h33
  3. Ajouter des éléments dans une base de données Access
    Par bidule123456 dans le forum ASP
    Réponses: 74
    Dernier message: 07/09/2007, 14h00
  4. comment ajouter des élements dans une liste ?
    Par ryoussef19 dans le forum VC++ .NET
    Réponses: 5
    Dernier message: 15/06/2007, 16h02
  5. Comment récuperer un élément dans une listview lors d'une sélection
    Par hellspawn_ludo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/04/2007, 02h37

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