none
[C#]2 Questions sur ListViewItem RRS feed

  • Question

  • Bonjour, 

    J'ai deux questions sur deux sujets différents mais sur le même composant :

    1er question :

    J'ai un tableau multicolonne, je souhaite que lorsque on clique sur une ligne de la ListViewItem, cela sélectionne toute la lignes.

    Comment faire ?

    Voir l'exemple ci dessus.

    lv_Affiche est la ListViewItem.

                lv_Afficher.Columns.Add("Id", -3, HorizontalAlignment.Left);
                lv_Afficher.Columns.Add("Identifiant", -3, HorizontalAlignment.Left);
                lv_Afficher.Columns.Add("Nom", -3, HorizontalAlignment.Left);
                lv_Afficher.Columns.Add("Prénom", -3, HorizontalAlignment.Left);
                foreach(var pers in data)
                {
                    ListViewItem item = new
    	        ListViewItem(pers.id);
                    item.SubItems.Add(pers.identifiant);
                    item.SubItems.Add(pers.nom);
                    item.SubItems.Add(pers.prenom);
                    lv_Afficher.Items.Add(item);
                }

    2 éme Question

    J'ai un tableau multicolonne, je souhaite que lorsque on clique sur une ligne de la ListViewItem, je puisse récupérer les valeurs de la ListViewItem dans une chaine.

    Comment faire ?

    Merci de votre aide...



    • Modifié WebForm jeudi 11 juin 2015 12:26
    jeudi 11 juin 2015 12:24

Réponses

  • 1er Question:
    Dans la feuille
    de propriétés de la listview , sélectionnez FullRowSelect et mis à true.


    2eme Question:
    //methode pour recuperer les valeurs de la listView:
    ArrayList aList = new ArrayList();
    string delimiter = ";";
    for(int i = 0; i< listView.Items.Count; i++)
    {
       string columns = String.Empty;
       columns += listView1.Items[i].Text + delimiter;
       columns += listView1.Items[i].Subitems[1].Text + delimiter;
       columns += listView1.Items[i].Subitems[2].Text + delimiter;
       columns += listView1.Items[i].Subitems[3].Text;
       aList.Add(columns);
    }
    
    //Pour visualiser le resultat:
    StringBuilder sb = new StringBuilder();
    foreach(string line in aList)
       sb.AppendLine(line);
    MessageBox.Show(sb.Tostring());


    • Marqué comme réponse WebForm dimanche 14 juin 2015 06:57
    jeudi 11 juin 2015 13:08
  • Bonjour,

    J'aime mieux utiliser une autre solution.
    Les listes, ComboBox, ListBox etc utilise la fonction ToString pour afficher les objets d'une classe.
    Redéfinissez la fonction ToString, par exemple:

    Définissez une classe Personne

    public class Personne
    {
    int m_ID;
    string m_Prenom;
    string m_Nom;
    public Personne(int p_ID, string p_Prenom, string p_Nom)
    {
    m_ID=p_ID;
    m_Prenom = new string(p_PRenom.ToCharArray());
    m_Nom=new string(p_PRenom.ToCharArray());
    }

    Afficher uniquement le prénom et le nom
    public override string ToString()
    {
    return m_Prenom + " " m_Nom;
    }

    int  ID { get { return m_ID; } }
    string Prenom{ get { return m_Prenom; } }
    string Nom{ get { return m_Nom; } }
    }

    dans le programme vous remplissez la liste avec votre classe

    ListBox LboxPersonnes = new ListBox();
    LboxPersonnes.Items.add(new Personne(0,"Jo", "Dalton"));
    etc.

    Lorsque l'utilisateur sélectionne une personne dans la liste
    vous pouvez récupérer les informations comme suit:

    Personne unePErsonne = (Personne) LboxPersonnes.selectedItem;

    Cordialement
    Gérard

    • Proposé comme réponse GP79 jeudi 11 juin 2015 20:53
    • Marqué comme réponse WebForm dimanche 14 juin 2015 06:57
    jeudi 11 juin 2015 14:10
  • Trouver :

    string productName = lv_Afficher.SelectedItems[0].SubItems[0].Text;

    Merci de votre coup de main a tous les deux.

    • Marqué comme réponse WebForm dimanche 14 juin 2015 06:57
    dimanche 14 juin 2015 06:57

Toutes les réponses

  • 1er Question:
    Dans la feuille
    de propriétés de la listview , sélectionnez FullRowSelect et mis à true.


    2eme Question:
    //methode pour recuperer les valeurs de la listView:
    ArrayList aList = new ArrayList();
    string delimiter = ";";
    for(int i = 0; i< listView.Items.Count; i++)
    {
       string columns = String.Empty;
       columns += listView1.Items[i].Text + delimiter;
       columns += listView1.Items[i].Subitems[1].Text + delimiter;
       columns += listView1.Items[i].Subitems[2].Text + delimiter;
       columns += listView1.Items[i].Subitems[3].Text;
       aList.Add(columns);
    }
    
    //Pour visualiser le resultat:
    StringBuilder sb = new StringBuilder();
    foreach(string line in aList)
       sb.AppendLine(line);
    MessageBox.Show(sb.Tostring());


    • Marqué comme réponse WebForm dimanche 14 juin 2015 06:57
    jeudi 11 juin 2015 13:08
  • Bonjour,

    J'aime mieux utiliser une autre solution.
    Les listes, ComboBox, ListBox etc utilise la fonction ToString pour afficher les objets d'une classe.
    Redéfinissez la fonction ToString, par exemple:

    Définissez une classe Personne

    public class Personne
    {
    int m_ID;
    string m_Prenom;
    string m_Nom;
    public Personne(int p_ID, string p_Prenom, string p_Nom)
    {
    m_ID=p_ID;
    m_Prenom = new string(p_PRenom.ToCharArray());
    m_Nom=new string(p_PRenom.ToCharArray());
    }

    Afficher uniquement le prénom et le nom
    public override string ToString()
    {
    return m_Prenom + " " m_Nom;
    }

    int  ID { get { return m_ID; } }
    string Prenom{ get { return m_Prenom; } }
    string Nom{ get { return m_Nom; } }
    }

    dans le programme vous remplissez la liste avec votre classe

    ListBox LboxPersonnes = new ListBox();
    LboxPersonnes.Items.add(new Personne(0,"Jo", "Dalton"));
    etc.

    Lorsque l'utilisateur sélectionne une personne dans la liste
    vous pouvez récupérer les informations comme suit:

    Personne unePErsonne = (Personne) LboxPersonnes.selectedItem;

    Cordialement
    Gérard

    • Proposé comme réponse GP79 jeudi 11 juin 2015 20:53
    • Marqué comme réponse WebForm dimanche 14 juin 2015 06:57
    jeudi 11 juin 2015 14:10
  • Bonjour,

    Merci a tous les deux de vos informations.

    Je test ça ce soir et je fais un retour.

    Cordialement,

    jeudi 11 juin 2015 14:25
  • Bonjour,

    il me reste un seul probleme :

    Lorsque je récupère la donnée.

    Je récupère sous cette forme :

    ListViewItem: {Ordinateur portable 14"}
    ListViewItem: {Ordinateur portable 15"}
    ListViewItem: {Ordinateur portable 15"}

     et non comme cela 

    Ordinateur portable 15"

    Il y a t'il une solution ou dois je travail la chaîne récupérer.

    dimanche 14 juin 2015 06:36
  • Trouver :

    string productName = lv_Afficher.SelectedItems[0].SubItems[0].Text;

    Merci de votre coup de main a tous les deux.

    • Marqué comme réponse WebForm dimanche 14 juin 2015 06:57
    dimanche 14 juin 2015 06:57