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 :

[C#] Construction d'une listeview


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [C#] Construction d'une listeview
    Bonjour à tous,

    Je souhaite alimenter un tableau à 5 colonnes et N lignes.

    En parcourant ce forum, j'ai réussi à le faire via un datagrid mais je préférerai le faire avec un listview. Malheureusement, celui-ci ne s'alimente pas correctement.

    Quelqu'un peut-il me donner un exemple ?

    Voici mon code :

    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
     // Reinitialisation du datagrid des traces
                    dataGridView_trace.SelectAll();
                    dataGridView_trace.ClearSelection();
                    // Construction du datagrid des traces
                    // Ouverture du flux et extraction de chaque ligne
                    StreamReader sr = new StreamReader(Boite.OpenFile());
                    try
                    {
                        string data = sr.ReadLine();
                        data = sr.ReadLine();
                        string[] DataResult = { "", "", "", "", "" };
                        while (data != null)
                        {
                            if (sr.EndOfStream == false)
                            {
                                int i = 0;
                                try
                                {
                                    XPathDocument doc = new XPathDocument(Application.StartupPath.ToString() + "/Parameters.xml");
                                    XPathNavigator nav = doc.CreateNavigator();
                                    XPathNodeIterator iter = nav.Select("parameters/data");
                                    while (iter.MoveNext())
                                    {
                                        int position_deb = iter.Current.SelectSingleNode("begin").ValueAsInt;
                                        int position_fin = iter.Current.SelectSingleNode("end").ValueAsInt;
                                        int longueur = iter.Current.SelectSingleNode("length").ValueAsInt;
                                        DataResult.SetValue(data.Substring(position_deb-1, longueur),i);
                                        i++;
                                    }
                                    DataResult.SetValue(data, 4);
                                    dataGridView_trace.Rows.Add(DataResult);
     
                                    DataResult.SetValue("", 0);
                                    DataResult.SetValue("", 1);
                                    DataResult.SetValue("", 2);
                                    DataResult.SetValue("", 3);
                                    DataResult.SetValue("", 4);
                                }
                                catch (IOException Exception)
                                {
                                    MessageBox.Show(Exception.ToString(), "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                }                           
                            }
                            data = sr.ReadLine();
                        }
                    }
                    // Fermeture du flux
                    finally
                    {
                        if (sr != null)
                        {
                            sr.Close();
                        }
                    }

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    Voici un exemple de creation de listview (2 colonnes) alimentée par une db
    Il faut creer la listview dans 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
    22
    23
    24
    25
    26
    27
     
     private void PopulateLB()
            {
                dataTable = dataSet.Tables[0];
                listView1.Items.Clear();
     
                string d1= "";
                listView1.View = View.Details;
     
                foreach (DataRow dataRow in dataTable.Rows)
                {
                    d1 = dataRow["DateRappel"].ToString();
                    d1 = d1.Substring(0, 10);
     
                    ListViewItem item1 = new ListViewItem(dataRow["Raison_Social"].ToString());
                    item1.SubItems.Add(d1);
                    item1.SubItems.Add(dataRow["Raison_Social"].ToString());
                    item1.Tag = dataRow;
                    this.listView1.Items.AddRange(new System.Windows.Forms.ListViewItem[] { item1 }); 
                }
     
                listView1.Columns.Add("Raison Sociale", -2, HorizontalAlignment.Left);
                listView1.Columns.Add("Date de rappel", -2, HorizontalAlignment.Left);
                listView1.AutoResizeColumn(0, ColumnHeaderAutoResizeStyle.HeaderSize);
                listView1.AutoResizeColumn(1,ColumnHeaderAutoResizeStyle.HeaderSize);
     
            }
    Bon courage

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Pour ma part, j'aime bien utiliser les ListView, mais l'inconvénient est qu'on ne peut pas les binder automatiquement.

    J'utilise donc le biais suivant :

    - Les Tags des colonnes sont positionnés avec le nom de la propriétés de l'objet à afficher.

    - Une petite méthode utilisant la reflection me permet de supporter une syntaxe type "Property.SubProperty" dans ces tags.

    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
     
    /// <summary>
    /// Return the value of a field or a property identified by its name
    /// </summary>
    /// <param name="instance">object to return value from</param>
    /// <param name="propertyOrFieldName">name of the field or property (prioririty to propertyname) 
    /// the field or property should be public and instance member (not static) </param>
    /// <returns></returns>
    public static object GetValueFromInstanceForFieldOrPropertyPath(object instance, string propertyOrFieldName)
    {
    if (instance == null || string.IsNullOrEmpty(propertyOrFieldName))
    {
    return null;
    }
    object instanceToRetrieveFrom;
    MemberInfo memberInfo = GetMemberInfoFromInstanceForFieldOrPropertyPath(instance, propertyOrFieldName, out instanceToRetrieveFrom);
    object valueToRetrieve = null;
    if (memberInfo is PropertyInfo)
    {
    valueToRetrieve = ((PropertyInfo)memberInfo).GetValue(instanceToRetrieveFrom, null);
    }
    else if(memberInfo is FieldInfo)
    {
    valueToRetrieve = ((FieldInfo)memberInfo).GetValue(instanceToRetrieveFrom);
    }
    return valueToRetrieve;
    }
    Ensuite j'ai des méthodes static pour alimenter la liste comme celle-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
    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
     
    /// <summary>
    /// Insert an object in a listview; optionnaly try to set each column by matching columnHeader tag with object property
    /// </summary>
    /// <param name="control"></param>
    /// <param name="instance"></param>
    /// <param name="tryToSetColumnFromColumnTag"></param>
    /// <returns></returns>
    public static ListViewItem InsertItem(ListView control, object instance, bool tryToSetColumnFromColumnTag)
    {
    if (control == null || instance == null)
    {
    return null;
    }
    if (control.InvokeRequired == false)
    {
    return insertItem(control, instance, tryToSetColumnFromColumnTag);
    }
    else
    {
    insertItemDelegate insertItemInvocator = new insertItemDelegate(insertItem);
    return (ListViewItem)control.Invoke(insertItemInvocator, control, instance, tryToSetColumnFromColumnTag);
    }
    }
    private delegate ListViewItem insertItemDelegate(ListView control, object instance, bool tryToSetColumnFromColumnTag);
    private static ListViewItem insertItem(ListView control, object instance, bool tryToSetColumnFromColumnTag)
    {
    ListViewItem item = null;
    List<MemberInfo> membersForSubItems = new List<MemberInfo>();
    // list headers Tag for properties
    if (tryToSetColumnFromColumnTag)
    {
    string[] memberNames = new string[control.Columns.Count];
    for (int iColumnHeader = 0; iColumnHeader < control.Columns.Count; iColumnHeader++)
    {
    memberNames[iColumnHeader] = (control.Columns[iColumnHeader].Tag as string) ?? null;
    }
    foreach (string memberName in memberNames)
    {
    if (string.IsNullOrEmpty(memberName) == false)
    {
    object objValue = ReflectionHelpers.GetValueFromInstanceForFieldOrPropertyPath(instance, memberName);
    string valueToDisplay = (objValue != null) ? objValue.ToString() : string.Empty;
    if (item == null)
    {
    item = control.Items.Add(valueToDisplay);
    }
    else
    {
    item.SubItems.Add(valueToDisplay);
    }
    }
    }
    }
    if (item == null) // pas de mapping, ou mapping invalide -> on cr‚e par d‚faut
    {
    item = control.Items.Add(instance.ToString());
    }
    item.Tag = instance;
    return item;
    }
    Ensuite le tout est explouté par un ListViewController generic qu'on instancie avec le type d'objet métier à affficher et l'instance de ListView à controller. (il gére un certain nombre de trucs en plus, tel qu'un menu contextuel standard, la copie vers le clipboard, etc ...)

    ensuite pour afficher une liste d'objet, je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _lvController.Objets = MyList;

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

Discussions similaires

  1. [débutant C#]construction d'une dll en dotnet..
    Par just1980 dans le forum C#
    Réponses: 20
    Dernier message: 19/08/2010, 15h53
  2. [VB6] Colorier les lignes d'une listeview
    Par alliance dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 14/05/2006, 14h29
  3. Construction d'une regexp : unmatched () in regexp
    Par linou dans le forum Langage
    Réponses: 7
    Dernier message: 27/01/2006, 11h34
  4. Problème de construction d'une classe
    Par AraBorLeg dans le forum Langage
    Réponses: 2
    Dernier message: 05/12/2005, 19h07
  5. construction d'une classe
    Par r0d dans le forum C++
    Réponses: 10
    Dernier message: 16/09/2004, 17h35

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